From fdf1cd0399158308769fcb2ab7e46e215a68d865 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 5 Jul 2007 21:52:40 +0000 Subject: [PATCH] Update the in-tree GMP; fixes trac #832 gmp is now in a top-level directory and we only have the tarball in the darcs repo. It gets untarred if it is needed. --- Makefile | 7 +- boot | 1 - gmp/Makefile | 110 + gmp/gmp-4.2.1.tar.gz | Bin 0 -> 2249464 bytes gmp/ln | 2 + includes/Makefile | 10 +- rts/Makefile | 48 +- rts/gmp/.gdbinit | 34 - rts/gmp/AUTHORS | 12 - rts/gmp/COPYING | 336 -- rts/gmp/COPYING.LIB | 515 --- rts/gmp/INSTALL | 146 - rts/gmp/Makefile.am | 197 -- rts/gmp/Makefile.in | 932 ----- rts/gmp/NEWS | 136 - rts/gmp/README | 84 - rts/gmp/acconfig.h | 92 - rts/gmp/acinclude.m4 | 835 ----- rts/gmp/aclocal.m4 | 1963 ----------- rts/gmp/ansi2knr.1 | 36 - rts/gmp/ansi2knr.c | 677 ---- rts/gmp/assert.c | 52 - rts/gmp/compat.c | 46 - rts/gmp/config.guess | 1373 -------- rts/gmp/config.in | 162 - rts/gmp/config.sub | 1273 ------- rts/gmp/configure | 5216 ---------------------------- rts/gmp/configure.in | 950 ----- rts/gmp/depcomp | 269 -- rts/gmp/errno.c | 26 - rts/gmp/extract-dbl.c | 187 - rts/gmp/gmp-impl.h | 1072 ------ rts/gmp/gmp.h | 1083 ------ rts/gmp/insert-dbl.c | 98 - rts/gmp/install-sh | 251 -- rts/gmp/longlong.h | 1347 ------- rts/gmp/ltconfig | 3109 ----------------- rts/gmp/ltmain.sh | 4692 ------------------------- rts/gmp/mdate-sh | 92 - rts/gmp/memory.c | 160 - rts/gmp/missing | 244 -- rts/gmp/mkinstalldirs | 38 - rts/gmp/mp.h | 124 - rts/gmp/mp_bpl.c | 27 - rts/gmp/mp_clz_tab.c | 36 - rts/gmp/mp_minv_tab.c | 50 - rts/gmp/mp_set_fns.c | 48 - rts/gmp/mpn/Makefile.am | 94 - rts/gmp/mpn/Makefile.in | 472 --- rts/gmp/mpn/README | 13 - rts/gmp/mpn/a29k/add_n.s | 120 - rts/gmp/mpn/a29k/addmul_1.s | 113 - rts/gmp/mpn/a29k/lshift.s | 93 - rts/gmp/mpn/a29k/mul_1.s | 97 - rts/gmp/mpn/a29k/rshift.s | 89 - rts/gmp/mpn/a29k/sub_n.s | 120 - rts/gmp/mpn/a29k/submul_1.s | 116 - rts/gmp/mpn/a29k/udiv.s | 30 - rts/gmp/mpn/a29k/umul.s | 29 - rts/gmp/mpn/alpha/README | 224 -- rts/gmp/mpn/alpha/add_n.asm | 114 - rts/gmp/mpn/alpha/addmul_1.asm | 87 - rts/gmp/mpn/alpha/cntlz.asm | 68 - rts/gmp/mpn/alpha/default.m4 | 77 - rts/gmp/mpn/alpha/ev5/add_n.asm | 143 - rts/gmp/mpn/alpha/ev5/lshift.asm | 169 - rts/gmp/mpn/alpha/ev5/rshift.asm | 167 - rts/gmp/mpn/alpha/ev5/sub_n.asm | 143 - rts/gmp/mpn/alpha/ev6/addmul_1.asm | 474 --- rts/gmp/mpn/alpha/ev6/gmp-mparam.h | 62 - rts/gmp/mpn/alpha/gmp-mparam.h | 64 - rts/gmp/mpn/alpha/invert_limb.asm | 345 -- rts/gmp/mpn/alpha/lshift.asm | 104 - rts/gmp/mpn/alpha/mul_1.asm | 71 - rts/gmp/mpn/alpha/rshift.asm | 102 - rts/gmp/mpn/alpha/sub_n.asm | 114 - rts/gmp/mpn/alpha/submul_1.asm | 87 - rts/gmp/mpn/alpha/udiv_qrnnd.S | 151 - rts/gmp/mpn/alpha/umul.asm | 39 - rts/gmp/mpn/alpha/unicos.m4 | 63 - rts/gmp/mpn/arm/add_n.S | 77 - rts/gmp/mpn/arm/addmul_1.S | 89 - rts/gmp/mpn/arm/gmp-mparam.h | 34 - rts/gmp/mpn/arm/mul_1.S | 81 - rts/gmp/mpn/arm/sub_n.S | 79 - rts/gmp/mpn/asm-defs.m4 | 1182 ------- rts/gmp/mpn/clipper/add_n.s | 48 - rts/gmp/mpn/clipper/mul_1.s | 47 - rts/gmp/mpn/clipper/sub_n.s | 48 - rts/gmp/mpn/cray/README | 14 - rts/gmp/mpn/cray/add_n.c | 96 - rts/gmp/mpn/cray/addmul_1.c | 46 - rts/gmp/mpn/cray/gmp-mparam.h | 27 - rts/gmp/mpn/cray/mul_1.c | 44 - rts/gmp/mpn/cray/mulww.f | 54 - rts/gmp/mpn/cray/mulww.s | 245 -- rts/gmp/mpn/cray/sub_n.c | 97 - rts/gmp/mpn/cray/submul_1.c | 46 - rts/gmp/mpn/generic/add_n.c | 62 - rts/gmp/mpn/generic/addmul_1.c | 65 - rts/gmp/mpn/generic/addsub_n.c | 167 - rts/gmp/mpn/generic/bdivmod.c | 120 - rts/gmp/mpn/generic/bz_divrem_n.c | 153 - rts/gmp/mpn/generic/cmp.c | 56 - rts/gmp/mpn/generic/diveby3.c | 77 - rts/gmp/mpn/generic/divrem.c | 101 - rts/gmp/mpn/generic/divrem_1.c | 248 -- rts/gmp/mpn/generic/divrem_2.c | 151 - rts/gmp/mpn/generic/dump.c | 76 - rts/gmp/mpn/generic/gcd.c | 414 --- rts/gmp/mpn/generic/gcd_1.c | 77 - rts/gmp/mpn/generic/gcdext.c | 700 ---- rts/gmp/mpn/generic/get_str.c | 216 -- rts/gmp/mpn/generic/gmp-mparam.h | 27 - rts/gmp/mpn/generic/hamdist.c | 94 - rts/gmp/mpn/generic/inlines.c | 24 - rts/gmp/mpn/generic/jacbase.c | 136 - rts/gmp/mpn/generic/lshift.c | 87 - rts/gmp/mpn/generic/mod_1.c | 175 - rts/gmp/mpn/generic/mod_1_rs.c | 111 - rts/gmp/mpn/generic/mul.c | 190 - rts/gmp/mpn/generic/mul_1.c | 59 - rts/gmp/mpn/generic/mul_basecase.c | 87 - rts/gmp/mpn/generic/mul_fft.c | 772 ---- rts/gmp/mpn/generic/mul_n.c | 1343 ------- rts/gmp/mpn/generic/perfsqr.c | 123 - rts/gmp/mpn/generic/popcount.c | 93 - rts/gmp/mpn/generic/pre_mod_1.c | 69 - rts/gmp/mpn/generic/random.c | 43 - rts/gmp/mpn/generic/random2.c | 105 - rts/gmp/mpn/generic/rshift.c | 88 - rts/gmp/mpn/generic/sb_divrem_mn.c | 201 -- rts/gmp/mpn/generic/scan0.c | 62 - rts/gmp/mpn/generic/scan1.c | 62 - rts/gmp/mpn/generic/set_str.c | 159 - rts/gmp/mpn/generic/sqr_basecase.c | 83 - rts/gmp/mpn/generic/sqrtrem.c | 509 --- rts/gmp/mpn/generic/sub_n.c | 62 - rts/gmp/mpn/generic/submul_1.c | 65 - rts/gmp/mpn/generic/tdiv_qr.c | 401 --- rts/gmp/mpn/generic/udiv_w_sdiv.c | 131 - rts/gmp/mpn/hppa/README | 91 - rts/gmp/mpn/hppa/add_n.s | 58 - rts/gmp/mpn/hppa/gmp-mparam.h | 63 - rts/gmp/mpn/hppa/hppa1_1/addmul_1.s | 102 - rts/gmp/mpn/hppa/hppa1_1/mul_1.s | 98 - rts/gmp/mpn/hppa/hppa1_1/pa7100/add_n.s | 75 - rts/gmp/mpn/hppa/hppa1_1/pa7100/addmul_1.S | 189 - rts/gmp/mpn/hppa/hppa1_1/pa7100/lshift.s | 83 - rts/gmp/mpn/hppa/hppa1_1/pa7100/rshift.s | 80 - rts/gmp/mpn/hppa/hppa1_1/pa7100/sub_n.s | 76 - rts/gmp/mpn/hppa/hppa1_1/pa7100/submul_1.S | 195 -- rts/gmp/mpn/hppa/hppa1_1/submul_1.s | 111 - rts/gmp/mpn/hppa/hppa1_1/udiv_qrnnd.S | 80 - rts/gmp/mpn/hppa/hppa1_1/umul.s | 42 - rts/gmp/mpn/hppa/hppa2_0/add_n.s | 88 - rts/gmp/mpn/hppa/hppa2_0/sub_n.s | 88 - rts/gmp/mpn/hppa/lshift.s | 66 - rts/gmp/mpn/hppa/rshift.s | 63 - rts/gmp/mpn/hppa/sub_n.s | 59 - rts/gmp/mpn/hppa/udiv_qrnnd.s | 286 -- rts/gmp/mpn/i960/README | 9 - rts/gmp/mpn/i960/add_n.s | 43 - rts/gmp/mpn/i960/addmul_1.s | 48 - rts/gmp/mpn/i960/mul_1.s | 45 - rts/gmp/mpn/i960/sub_n.s | 43 - rts/gmp/mpn/lisp/gmpasm-mode.el | 351 -- rts/gmp/mpn/m68k/add_n.S | 79 - rts/gmp/mpn/m68k/lshift.S | 150 - rts/gmp/mpn/m68k/mc68020/addmul_1.S | 83 - rts/gmp/mpn/m68k/mc68020/mul_1.S | 90 - rts/gmp/mpn/m68k/mc68020/submul_1.S | 83 - rts/gmp/mpn/m68k/mc68020/udiv.S | 31 - rts/gmp/mpn/m68k/mc68020/umul.S | 31 - rts/gmp/mpn/m68k/rshift.S | 149 - rts/gmp/mpn/m68k/sub_n.S | 79 - rts/gmp/mpn/m68k/syntax.h | 177 - rts/gmp/mpn/m88k/add_n.s | 104 - rts/gmp/mpn/m88k/mc88110/add_n.S | 200 -- rts/gmp/mpn/m88k/mc88110/addmul_1.s | 61 - rts/gmp/mpn/m88k/mc88110/mul_1.s | 59 - rts/gmp/mpn/m88k/mc88110/sub_n.S | 276 -- rts/gmp/mpn/m88k/mul_1.s | 127 - rts/gmp/mpn/m88k/sub_n.s | 106 - rts/gmp/mpn/mips2/add_n.s | 120 - rts/gmp/mpn/mips2/addmul_1.s | 97 - rts/gmp/mpn/mips2/lshift.s | 95 - rts/gmp/mpn/mips2/mul_1.s | 85 - rts/gmp/mpn/mips2/rshift.s | 92 - rts/gmp/mpn/mips2/sub_n.s | 120 - rts/gmp/mpn/mips2/submul_1.s | 97 - rts/gmp/mpn/mips2/umul.s | 30 - rts/gmp/mpn/mips3/README | 23 - rts/gmp/mpn/mips3/add_n.s | 120 - rts/gmp/mpn/mips3/addmul_1.s | 97 - rts/gmp/mpn/mips3/gmp-mparam.h | 58 - rts/gmp/mpn/mips3/lshift.s | 95 - rts/gmp/mpn/mips3/mul_1.s | 85 - rts/gmp/mpn/mips3/rshift.s | 92 - rts/gmp/mpn/mips3/sub_n.s | 120 - rts/gmp/mpn/mips3/submul_1.s | 97 - rts/gmp/mpn/mp_bases.c | 550 --- rts/gmp/mpn/ns32k/add_n.s | 46 - rts/gmp/mpn/ns32k/addmul_1.s | 48 - rts/gmp/mpn/ns32k/mul_1.s | 47 - rts/gmp/mpn/ns32k/sub_n.s | 46 - rts/gmp/mpn/ns32k/submul_1.s | 48 - rts/gmp/mpn/pa64/README | 38 - rts/gmp/mpn/pa64/add_n.s | 90 - rts/gmp/mpn/pa64/addmul_1.S | 167 - rts/gmp/mpn/pa64/gmp-mparam.h | 65 - rts/gmp/mpn/pa64/lshift.s | 103 - rts/gmp/mpn/pa64/mul_1.S | 158 - rts/gmp/mpn/pa64/rshift.s | 100 - rts/gmp/mpn/pa64/sub_n.s | 90 - rts/gmp/mpn/pa64/submul_1.S | 170 - rts/gmp/mpn/pa64/udiv_qrnnd.c | 111 - rts/gmp/mpn/pa64/umul_ppmm.S | 74 - rts/gmp/mpn/pa64w/README | 2 - rts/gmp/mpn/pa64w/add_n.s | 90 - rts/gmp/mpn/pa64w/addmul_1.S | 168 - rts/gmp/mpn/pa64w/gmp-mparam.h | 65 - rts/gmp/mpn/pa64w/lshift.s | 103 - rts/gmp/mpn/pa64w/mul_1.S | 159 - rts/gmp/mpn/pa64w/rshift.s | 100 - rts/gmp/mpn/pa64w/sub_n.s | 90 - rts/gmp/mpn/pa64w/submul_1.S | 171 - rts/gmp/mpn/pa64w/udiv_qrnnd.c | 117 - rts/gmp/mpn/pa64w/umul_ppmm.S | 72 - rts/gmp/mpn/power/add_n.s | 79 - rts/gmp/mpn/power/addmul_1.s | 122 - rts/gmp/mpn/power/lshift.s | 56 - rts/gmp/mpn/power/mul_1.s | 109 - rts/gmp/mpn/power/rshift.s | 54 - rts/gmp/mpn/power/sdiv.s | 34 - rts/gmp/mpn/power/sub_n.s | 80 - rts/gmp/mpn/power/submul_1.s | 127 - rts/gmp/mpn/power/umul.s | 38 - rts/gmp/mpn/powerpc32/add_n.asm | 61 - rts/gmp/mpn/powerpc32/addmul_1.asm | 124 - rts/gmp/mpn/powerpc32/aix.m4 | 39 - rts/gmp/mpn/powerpc32/gmp-mparam.h | 66 - rts/gmp/mpn/powerpc32/lshift.asm | 145 - rts/gmp/mpn/powerpc32/mul_1.asm | 86 - rts/gmp/mpn/powerpc32/regmap.m4 | 34 - rts/gmp/mpn/powerpc32/rshift.asm | 60 - rts/gmp/mpn/powerpc32/sub_n.asm | 61 - rts/gmp/mpn/powerpc32/submul_1.asm | 130 - rts/gmp/mpn/powerpc32/umul.asm | 32 - rts/gmp/mpn/powerpc64/README | 36 - rts/gmp/mpn/powerpc64/add_n.asm | 61 - rts/gmp/mpn/powerpc64/addmul_1.asm | 52 - rts/gmp/mpn/powerpc64/addsub_n.asm | 107 - rts/gmp/mpn/powerpc64/aix.m4 | 40 - rts/gmp/mpn/powerpc64/copyd.asm | 45 - rts/gmp/mpn/powerpc64/copyi.asm | 44 - rts/gmp/mpn/powerpc64/gmp-mparam.h | 62 - rts/gmp/mpn/powerpc64/lshift.asm | 159 - rts/gmp/mpn/powerpc64/mul_1.asm | 49 - rts/gmp/mpn/powerpc64/rshift.asm | 60 - rts/gmp/mpn/powerpc64/sub_n.asm | 61 - rts/gmp/mpn/powerpc64/submul_1.asm | 54 - rts/gmp/mpn/pyr/add_n.s | 76 - rts/gmp/mpn/pyr/addmul_1.s | 45 - rts/gmp/mpn/pyr/mul_1.s | 42 - rts/gmp/mpn/pyr/sub_n.s | 76 - rts/gmp/mpn/sh/add_n.s | 47 - rts/gmp/mpn/sh/sh2/addmul_1.s | 53 - rts/gmp/mpn/sh/sh2/mul_1.s | 50 - rts/gmp/mpn/sh/sh2/submul_1.s | 53 - rts/gmp/mpn/sh/sub_n.s | 47 - rts/gmp/mpn/sparc32/README | 36 - rts/gmp/mpn/sparc32/add_n.asm | 236 -- rts/gmp/mpn/sparc32/addmul_1.asm | 146 - rts/gmp/mpn/sparc32/lshift.asm | 97 - rts/gmp/mpn/sparc32/mul_1.asm | 137 - rts/gmp/mpn/sparc32/rshift.asm | 93 - rts/gmp/mpn/sparc32/sub_n.asm | 326 -- rts/gmp/mpn/sparc32/submul_1.asm | 146 - rts/gmp/mpn/sparc32/udiv_fp.asm | 158 - rts/gmp/mpn/sparc32/udiv_nfp.asm | 193 - rts/gmp/mpn/sparc32/umul.asm | 68 - rts/gmp/mpn/sparc32/v8/addmul_1.asm | 122 - rts/gmp/mpn/sparc32/v8/mul_1.asm | 103 - rts/gmp/mpn/sparc32/v8/submul_1.asm | 58 - rts/gmp/mpn/sparc32/v8/supersparc/udiv.asm | 122 - rts/gmp/mpn/sparc32/v8/umul.asm | 31 - rts/gmp/mpn/sparc32/v9/README | 4 - rts/gmp/mpn/sparc32/v9/addmul_1.asm | 288 -- rts/gmp/mpn/sparc32/v9/gmp-mparam.h | 69 - rts/gmp/mpn/sparc32/v9/mul_1.asm | 267 -- rts/gmp/mpn/sparc32/v9/submul_1.asm | 291 -- rts/gmp/mpn/sparc64/README | 48 - rts/gmp/mpn/sparc64/add_n.asm | 172 - rts/gmp/mpn/sparc64/addmul1h.asm | 203 -- rts/gmp/mpn/sparc64/addmul_1.asm | 114 - rts/gmp/mpn/sparc64/copyi.asm | 79 - rts/gmp/mpn/sparc64/gmp-mparam.h | 88 - rts/gmp/mpn/sparc64/lshift.asm | 97 - rts/gmp/mpn/sparc64/mul_1.asm | 113 - rts/gmp/mpn/sparc64/mul_1h.asm | 183 - rts/gmp/mpn/sparc64/rshift.asm | 94 - rts/gmp/mpn/sparc64/sub_n.asm | 172 - rts/gmp/mpn/sparc64/submul1h.asm | 204 -- rts/gmp/mpn/sparc64/submul_1.asm | 114 - rts/gmp/mpn/thumb/add_n.s | 50 - rts/gmp/mpn/thumb/sub_n.s | 50 - rts/gmp/mpn/underscore.h | 26 - rts/gmp/mpn/vax/add_n.s | 61 - rts/gmp/mpn/vax/addmul_1.s | 126 - rts/gmp/mpn/vax/lshift.s | 58 - rts/gmp/mpn/vax/mul_1.s | 123 - rts/gmp/mpn/vax/rshift.s | 56 - rts/gmp/mpn/vax/sub_n.s | 61 - rts/gmp/mpn/vax/submul_1.s | 126 - rts/gmp/mpn/x86/README | 40 - rts/gmp/mpn/x86/README.family | 333 -- rts/gmp/mpn/x86/addsub_n.S | 174 - rts/gmp/mpn/x86/aors_n.asm | 187 - rts/gmp/mpn/x86/aorsmul_1.asm | 134 - rts/gmp/mpn/x86/copyd.asm | 80 - rts/gmp/mpn/x86/copyi.asm | 79 - rts/gmp/mpn/x86/diveby3.asm | 115 - rts/gmp/mpn/x86/divrem_1.asm | 232 -- rts/gmp/mpn/x86/k6/README | 237 -- rts/gmp/mpn/x86/k6/aors_n.asm | 329 -- rts/gmp/mpn/x86/k6/aorsmul_1.asm | 372 -- rts/gmp/mpn/x86/k6/cross.pl | 141 - rts/gmp/mpn/x86/k6/diveby3.asm | 110 - rts/gmp/mpn/x86/k6/gmp-mparam.h | 97 - rts/gmp/mpn/x86/k6/k62mmx/copyd.asm | 179 - rts/gmp/mpn/x86/k6/k62mmx/copyi.asm | 196 -- rts/gmp/mpn/x86/k6/k62mmx/lshift.asm | 286 -- rts/gmp/mpn/x86/k6/k62mmx/rshift.asm | 285 -- rts/gmp/mpn/x86/k6/mmx/com_n.asm | 91 - rts/gmp/mpn/x86/k6/mmx/logops_n.asm | 212 -- rts/gmp/mpn/x86/k6/mmx/lshift.asm | 122 - rts/gmp/mpn/x86/k6/mmx/popham.asm | 238 -- rts/gmp/mpn/x86/k6/mmx/rshift.asm | 122 - rts/gmp/mpn/x86/k6/mul_1.asm | 272 -- rts/gmp/mpn/x86/k6/mul_basecase.asm | 600 ---- rts/gmp/mpn/x86/k6/sqr_basecase.asm | 672 ---- rts/gmp/mpn/x86/k7/README | 145 - rts/gmp/mpn/x86/k7/aors_n.asm | 250 -- rts/gmp/mpn/x86/k7/aorsmul_1.asm | 364 -- rts/gmp/mpn/x86/k7/diveby3.asm | 131 - rts/gmp/mpn/x86/k7/gmp-mparam.h | 100 - rts/gmp/mpn/x86/k7/mmx/copyd.asm | 136 - rts/gmp/mpn/x86/k7/mmx/copyi.asm | 147 - rts/gmp/mpn/x86/k7/mmx/divrem_1.asm | 718 ---- rts/gmp/mpn/x86/k7/mmx/lshift.asm | 472 --- rts/gmp/mpn/x86/k7/mmx/mod_1.asm | 457 --- rts/gmp/mpn/x86/k7/mmx/popham.asm | 239 -- rts/gmp/mpn/x86/k7/mmx/rshift.asm | 471 --- rts/gmp/mpn/x86/k7/mul_1.asm | 265 -- rts/gmp/mpn/x86/k7/mul_basecase.asm | 593 ---- rts/gmp/mpn/x86/k7/sqr_basecase.asm | 627 ---- rts/gmp/mpn/x86/lshift.asm | 90 - rts/gmp/mpn/x86/mod_1.asm | 141 - rts/gmp/mpn/x86/mul_1.asm | 130 - rts/gmp/mpn/x86/mul_basecase.asm | 209 -- rts/gmp/mpn/x86/p6/README | 95 - rts/gmp/mpn/x86/p6/aorsmul_1.asm | 300 -- rts/gmp/mpn/x86/p6/diveby3.asm | 37 - rts/gmp/mpn/x86/p6/gmp-mparam.h | 96 - rts/gmp/mpn/x86/p6/mmx/divrem_1.asm | 677 ---- rts/gmp/mpn/x86/p6/mmx/mod_1.asm | 444 --- rts/gmp/mpn/x86/p6/mmx/popham.asm | 31 - rts/gmp/mpn/x86/p6/p3mmx/popham.asm | 30 - rts/gmp/mpn/x86/p6/sqr_basecase.asm | 641 ---- rts/gmp/mpn/x86/pentium/README | 77 - rts/gmp/mpn/x86/pentium/aors_n.asm | 196 -- rts/gmp/mpn/x86/pentium/aorsmul_1.asm | 99 - rts/gmp/mpn/x86/pentium/diveby3.asm | 183 - rts/gmp/mpn/x86/pentium/gmp-mparam.h | 97 - rts/gmp/mpn/x86/pentium/lshift.asm | 236 -- rts/gmp/mpn/x86/pentium/mmx/gmp-mparam.h | 97 - rts/gmp/mpn/x86/pentium/mmx/lshift.asm | 455 --- rts/gmp/mpn/x86/pentium/mmx/popham.asm | 30 - rts/gmp/mpn/x86/pentium/mmx/rshift.asm | 460 --- rts/gmp/mpn/x86/pentium/mul_1.asm | 79 - rts/gmp/mpn/x86/pentium/mul_basecase.asm | 135 - rts/gmp/mpn/x86/pentium/rshift.asm | 236 -- rts/gmp/mpn/x86/pentium/sqr_basecase.asm | 520 --- rts/gmp/mpn/x86/rshift.asm | 92 - rts/gmp/mpn/x86/udiv.asm | 44 - rts/gmp/mpn/x86/umul.asm | 43 - rts/gmp/mpn/x86/x86-defs.m4 | 713 ---- rts/gmp/mpn/z8000/add_n.s | 53 - rts/gmp/mpn/z8000/gmp-mparam.h | 27 - rts/gmp/mpn/z8000/mul_1.s | 68 - rts/gmp/mpn/z8000/sub_n.s | 54 - rts/gmp/mpn/z8000x/add_n.s | 56 - rts/gmp/mpn/z8000x/sub_n.s | 56 - rts/gmp/mpz/Makefile.am | 58 - rts/gmp/mpz/Makefile.in | 457 --- rts/gmp/mpz/README | 23 - rts/gmp/mpz/abs.c | 51 - rts/gmp/mpz/add.c | 123 - rts/gmp/mpz/add_ui.c | 84 - rts/gmp/mpz/addmul_ui.c | 214 -- rts/gmp/mpz/and.c | 278 -- rts/gmp/mpz/array_init.c | 48 - rts/gmp/mpz/bin_ui.c | 141 - rts/gmp/mpz/bin_uiui.c | 120 - rts/gmp/mpz/cdiv_q.c | 51 - rts/gmp/mpz/cdiv_q_ui.c | 67 - rts/gmp/mpz/cdiv_qr.c | 64 - rts/gmp/mpz/cdiv_qr_ui.c | 71 - rts/gmp/mpz/cdiv_r.c | 59 - rts/gmp/mpz/cdiv_r_ui.c | 57 - rts/gmp/mpz/cdiv_ui.c | 50 - rts/gmp/mpz/clear.c | 35 - rts/gmp/mpz/clrbit.c | 114 - rts/gmp/mpz/cmp.c | 75 - rts/gmp/mpz/cmp_si.c | 64 - rts/gmp/mpz/cmp_ui.c | 53 - rts/gmp/mpz/cmpabs.c | 57 - rts/gmp/mpz/cmpabs_ui.c | 56 - rts/gmp/mpz/com.c | 93 - rts/gmp/mpz/divexact.c | 125 - rts/gmp/mpz/dump.c | 44 - rts/gmp/mpz/fac_ui.c | 157 - rts/gmp/mpz/fdiv_q.c | 51 - rts/gmp/mpz/fdiv_q_2exp.c | 104 - rts/gmp/mpz/fdiv_q_ui.c | 65 - rts/gmp/mpz/fdiv_qr.c | 64 - rts/gmp/mpz/fdiv_qr_ui.c | 69 - rts/gmp/mpz/fdiv_r.c | 58 - rts/gmp/mpz/fdiv_r_2exp.c | 156 - rts/gmp/mpz/fdiv_r_ui.c | 55 - rts/gmp/mpz/fdiv_ui.c | 48 - rts/gmp/mpz/fib_ui.c | 165 - rts/gmp/mpz/fits_sint_p.c | 50 - rts/gmp/mpz/fits_slong_p.c | 50 - rts/gmp/mpz/fits_sshort_p.c | 50 - rts/gmp/mpz/fits_uint_p.c | 41 - rts/gmp/mpz/fits_ulong_p.c | 41 - rts/gmp/mpz/fits_ushort_p.c | 41 - rts/gmp/mpz/gcd.c | 180 - rts/gmp/mpz/gcd_ui.c | 65 - rts/gmp/mpz/gcdext.c | 137 - rts/gmp/mpz/get_d.c | 128 - rts/gmp/mpz/get_si.c | 43 - rts/gmp/mpz/get_str.c | 118 - rts/gmp/mpz/get_ui.c | 37 - rts/gmp/mpz/getlimbn.c | 38 - rts/gmp/mpz/hamdist.c | 62 - rts/gmp/mpz/init.c | 36 - rts/gmp/mpz/inp_raw.c | 101 - rts/gmp/mpz/inp_str.c | 167 - rts/gmp/mpz/invert.c | 77 - rts/gmp/mpz/ior.c | 244 -- rts/gmp/mpz/iset.c | 49 - rts/gmp/mpz/iset_d.c | 39 - rts/gmp/mpz/iset_si.c | 49 - rts/gmp/mpz/iset_str.c | 47 - rts/gmp/mpz/iset_ui.c | 39 - rts/gmp/mpz/jacobi.c | 53 - rts/gmp/mpz/kronsz.c | 126 - rts/gmp/mpz/kronuz.c | 115 - rts/gmp/mpz/kronzs.c | 74 - rts/gmp/mpz/kronzu.c | 66 - rts/gmp/mpz/lcm.c | 61 - rts/gmp/mpz/legendre.c | 184 - rts/gmp/mpz/mod.c | 63 - rts/gmp/mpz/mul.c | 131 - rts/gmp/mpz/mul_2exp.c | 76 - rts/gmp/mpz/mul_siui.c | 81 - rts/gmp/mpz/neg.c | 53 - rts/gmp/mpz/nextprime.c | 120 - rts/gmp/mpz/out_raw.c | 89 - rts/gmp/mpz/out_str.c | 108 - rts/gmp/mpz/perfpow.c | 272 -- rts/gmp/mpz/perfsqr.c | 45 - rts/gmp/mpz/popcount.c | 42 - rts/gmp/mpz/pow_ui.c | 129 - rts/gmp/mpz/powm.c | 364 -- rts/gmp/mpz/powm_ui.c | 248 -- rts/gmp/mpz/pprime_p.c | 242 -- rts/gmp/mpz/random.c | 56 - rts/gmp/mpz/random2.c | 48 - rts/gmp/mpz/realloc.c | 52 - rts/gmp/mpz/remove.c | 93 - rts/gmp/mpz/root.c | 183 - rts/gmp/mpz/rrandomb.c | 117 - rts/gmp/mpz/scan0.c | 35 - rts/gmp/mpz/scan1.c | 35 - rts/gmp/mpz/set.c | 48 - rts/gmp/mpz/set_d.c | 96 - rts/gmp/mpz/set_f.c | 64 - rts/gmp/mpz/set_q.c | 36 - rts/gmp/mpz/set_si.c | 48 - rts/gmp/mpz/set_str.c | 157 - rts/gmp/mpz/set_ui.c | 43 - rts/gmp/mpz/setbit.c | 119 - rts/gmp/mpz/size.c | 35 - rts/gmp/mpz/sizeinbase.c | 60 - rts/gmp/mpz/sqrt.c | 86 - rts/gmp/mpz/sqrtrem.c | 111 - rts/gmp/mpz/sub.c | 123 - rts/gmp/mpz/sub_ui.c | 84 - rts/gmp/mpz/swap.c | 52 - rts/gmp/mpz/tdiv_q.c | 91 - rts/gmp/mpz/tdiv_q_2exp.c | 68 - rts/gmp/mpz/tdiv_q_ui.c | 64 - rts/gmp/mpz/tdiv_qr.c | 130 - rts/gmp/mpz/tdiv_qr_ui.c | 76 - rts/gmp/mpz/tdiv_r.c | 98 - rts/gmp/mpz/tdiv_r_2exp.c | 79 - rts/gmp/mpz/tdiv_r_ui.c | 63 - rts/gmp/mpz/tdiv_ui.c | 53 - rts/gmp/mpz/tstbit.c | 70 - rts/gmp/mpz/ui_pow_ui.c | 139 - rts/gmp/mpz/urandomb.c | 49 - rts/gmp/mpz/urandomm.c | 78 - rts/gmp/mpz/xor.c | 217 -- rts/gmp/rand.c | 171 - rts/gmp/randclr.c | 54 - rts/gmp/randlc.c | 56 - rts/gmp/randlc2x.c | 59 - rts/gmp/randraw.c | 360 -- rts/gmp/randsd.c | 37 - rts/gmp/randsdui.c | 37 - rts/gmp/stack-alloc.c | 136 - rts/gmp/stack-alloc.h | 64 - rts/gmp/stamp-h.in | 1 - rts/gmp/stamp-vti | 3 - rts/gmp/urandom.h | 86 - rts/gmp/version.c | 26 - rts/gmp/version.texi | 3 - rts/package.conf.in | 4 +- utils/hsc2hs/Makefile | 2 +- 533 files changed, 127 insertions(+), 90643 deletions(-) create mode 100644 gmp/Makefile create mode 100644 gmp/gmp-4.2.1.tar.gz create mode 100644 gmp/ln delete mode 100644 rts/gmp/.gdbinit delete mode 100644 rts/gmp/AUTHORS delete mode 100644 rts/gmp/COPYING delete mode 100644 rts/gmp/COPYING.LIB delete mode 100644 rts/gmp/INSTALL delete mode 100644 rts/gmp/Makefile.am delete mode 100644 rts/gmp/Makefile.in delete mode 100644 rts/gmp/NEWS delete mode 100644 rts/gmp/README delete mode 100644 rts/gmp/acconfig.h delete mode 100644 rts/gmp/acinclude.m4 delete mode 100644 rts/gmp/aclocal.m4 delete mode 100644 rts/gmp/ansi2knr.1 delete mode 100644 rts/gmp/ansi2knr.c delete mode 100644 rts/gmp/assert.c delete mode 100644 rts/gmp/compat.c delete mode 100644 rts/gmp/config.guess delete mode 100644 rts/gmp/config.in delete mode 100644 rts/gmp/config.sub delete mode 100644 rts/gmp/configure delete mode 100644 rts/gmp/configure.in delete mode 100644 rts/gmp/depcomp delete mode 100644 rts/gmp/errno.c delete mode 100644 rts/gmp/extract-dbl.c delete mode 100644 rts/gmp/gmp-impl.h delete mode 100644 rts/gmp/gmp.h delete mode 100644 rts/gmp/insert-dbl.c delete mode 100644 rts/gmp/install-sh delete mode 100644 rts/gmp/longlong.h delete mode 100644 rts/gmp/ltconfig delete mode 100644 rts/gmp/ltmain.sh delete mode 100644 rts/gmp/mdate-sh delete mode 100644 rts/gmp/memory.c delete mode 100644 rts/gmp/missing delete mode 100644 rts/gmp/mkinstalldirs delete mode 100644 rts/gmp/mp.h delete mode 100644 rts/gmp/mp_bpl.c delete mode 100644 rts/gmp/mp_clz_tab.c delete mode 100644 rts/gmp/mp_minv_tab.c delete mode 100644 rts/gmp/mp_set_fns.c delete mode 100644 rts/gmp/mpn/Makefile.am delete mode 100644 rts/gmp/mpn/Makefile.in delete mode 100644 rts/gmp/mpn/README delete mode 100644 rts/gmp/mpn/a29k/add_n.s delete mode 100644 rts/gmp/mpn/a29k/addmul_1.s delete mode 100644 rts/gmp/mpn/a29k/lshift.s delete mode 100644 rts/gmp/mpn/a29k/mul_1.s delete mode 100644 rts/gmp/mpn/a29k/rshift.s delete mode 100644 rts/gmp/mpn/a29k/sub_n.s delete mode 100644 rts/gmp/mpn/a29k/submul_1.s delete mode 100644 rts/gmp/mpn/a29k/udiv.s delete mode 100644 rts/gmp/mpn/a29k/umul.s delete mode 100644 rts/gmp/mpn/alpha/README delete mode 100644 rts/gmp/mpn/alpha/add_n.asm delete mode 100644 rts/gmp/mpn/alpha/addmul_1.asm delete mode 100644 rts/gmp/mpn/alpha/cntlz.asm delete mode 100644 rts/gmp/mpn/alpha/default.m4 delete mode 100644 rts/gmp/mpn/alpha/ev5/add_n.asm delete mode 100644 rts/gmp/mpn/alpha/ev5/lshift.asm delete mode 100644 rts/gmp/mpn/alpha/ev5/rshift.asm delete mode 100644 rts/gmp/mpn/alpha/ev5/sub_n.asm delete mode 100644 rts/gmp/mpn/alpha/ev6/addmul_1.asm delete mode 100644 rts/gmp/mpn/alpha/ev6/gmp-mparam.h delete mode 100644 rts/gmp/mpn/alpha/gmp-mparam.h delete mode 100644 rts/gmp/mpn/alpha/invert_limb.asm delete mode 100644 rts/gmp/mpn/alpha/lshift.asm delete mode 100644 rts/gmp/mpn/alpha/mul_1.asm delete mode 100644 rts/gmp/mpn/alpha/rshift.asm delete mode 100644 rts/gmp/mpn/alpha/sub_n.asm delete mode 100644 rts/gmp/mpn/alpha/submul_1.asm delete mode 100644 rts/gmp/mpn/alpha/udiv_qrnnd.S delete mode 100644 rts/gmp/mpn/alpha/umul.asm delete mode 100644 rts/gmp/mpn/alpha/unicos.m4 delete mode 100644 rts/gmp/mpn/arm/add_n.S delete mode 100644 rts/gmp/mpn/arm/addmul_1.S delete mode 100644 rts/gmp/mpn/arm/gmp-mparam.h delete mode 100644 rts/gmp/mpn/arm/mul_1.S delete mode 100644 rts/gmp/mpn/arm/sub_n.S delete mode 100644 rts/gmp/mpn/asm-defs.m4 delete mode 100644 rts/gmp/mpn/clipper/add_n.s delete mode 100644 rts/gmp/mpn/clipper/mul_1.s delete mode 100644 rts/gmp/mpn/clipper/sub_n.s delete mode 100644 rts/gmp/mpn/cray/README delete mode 100644 rts/gmp/mpn/cray/add_n.c delete mode 100644 rts/gmp/mpn/cray/addmul_1.c delete mode 100644 rts/gmp/mpn/cray/gmp-mparam.h delete mode 100644 rts/gmp/mpn/cray/mul_1.c delete mode 100644 rts/gmp/mpn/cray/mulww.f delete mode 100644 rts/gmp/mpn/cray/mulww.s delete mode 100644 rts/gmp/mpn/cray/sub_n.c delete mode 100644 rts/gmp/mpn/cray/submul_1.c delete mode 100644 rts/gmp/mpn/generic/add_n.c delete mode 100644 rts/gmp/mpn/generic/addmul_1.c delete mode 100644 rts/gmp/mpn/generic/addsub_n.c delete mode 100644 rts/gmp/mpn/generic/bdivmod.c delete mode 100644 rts/gmp/mpn/generic/bz_divrem_n.c delete mode 100644 rts/gmp/mpn/generic/cmp.c delete mode 100644 rts/gmp/mpn/generic/diveby3.c delete mode 100644 rts/gmp/mpn/generic/divrem.c delete mode 100644 rts/gmp/mpn/generic/divrem_1.c delete mode 100644 rts/gmp/mpn/generic/divrem_2.c delete mode 100644 rts/gmp/mpn/generic/dump.c delete mode 100644 rts/gmp/mpn/generic/gcd.c delete mode 100644 rts/gmp/mpn/generic/gcd_1.c delete mode 100644 rts/gmp/mpn/generic/gcdext.c delete mode 100644 rts/gmp/mpn/generic/get_str.c delete mode 100644 rts/gmp/mpn/generic/gmp-mparam.h delete mode 100644 rts/gmp/mpn/generic/hamdist.c delete mode 100644 rts/gmp/mpn/generic/inlines.c delete mode 100644 rts/gmp/mpn/generic/jacbase.c delete mode 100644 rts/gmp/mpn/generic/lshift.c delete mode 100644 rts/gmp/mpn/generic/mod_1.c delete mode 100644 rts/gmp/mpn/generic/mod_1_rs.c delete mode 100644 rts/gmp/mpn/generic/mul.c delete mode 100644 rts/gmp/mpn/generic/mul_1.c delete mode 100644 rts/gmp/mpn/generic/mul_basecase.c delete mode 100644 rts/gmp/mpn/generic/mul_fft.c delete mode 100644 rts/gmp/mpn/generic/mul_n.c delete mode 100644 rts/gmp/mpn/generic/perfsqr.c delete mode 100644 rts/gmp/mpn/generic/popcount.c delete mode 100644 rts/gmp/mpn/generic/pre_mod_1.c delete mode 100644 rts/gmp/mpn/generic/random.c delete mode 100644 rts/gmp/mpn/generic/random2.c delete mode 100644 rts/gmp/mpn/generic/rshift.c delete mode 100644 rts/gmp/mpn/generic/sb_divrem_mn.c delete mode 100644 rts/gmp/mpn/generic/scan0.c delete mode 100644 rts/gmp/mpn/generic/scan1.c delete mode 100644 rts/gmp/mpn/generic/set_str.c delete mode 100644 rts/gmp/mpn/generic/sqr_basecase.c delete mode 100644 rts/gmp/mpn/generic/sqrtrem.c delete mode 100644 rts/gmp/mpn/generic/sub_n.c delete mode 100644 rts/gmp/mpn/generic/submul_1.c delete mode 100644 rts/gmp/mpn/generic/tdiv_qr.c delete mode 100644 rts/gmp/mpn/generic/udiv_w_sdiv.c delete mode 100644 rts/gmp/mpn/hppa/README delete mode 100644 rts/gmp/mpn/hppa/add_n.s delete mode 100644 rts/gmp/mpn/hppa/gmp-mparam.h delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/addmul_1.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/mul_1.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/add_n.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/addmul_1.S delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/lshift.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/rshift.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/sub_n.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/pa7100/submul_1.S delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/submul_1.s delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/udiv_qrnnd.S delete mode 100644 rts/gmp/mpn/hppa/hppa1_1/umul.s delete mode 100644 rts/gmp/mpn/hppa/hppa2_0/add_n.s delete mode 100644 rts/gmp/mpn/hppa/hppa2_0/sub_n.s delete mode 100644 rts/gmp/mpn/hppa/lshift.s delete mode 100644 rts/gmp/mpn/hppa/rshift.s delete mode 100644 rts/gmp/mpn/hppa/sub_n.s delete mode 100644 rts/gmp/mpn/hppa/udiv_qrnnd.s delete mode 100644 rts/gmp/mpn/i960/README delete mode 100644 rts/gmp/mpn/i960/add_n.s delete mode 100644 rts/gmp/mpn/i960/addmul_1.s delete mode 100644 rts/gmp/mpn/i960/mul_1.s delete mode 100644 rts/gmp/mpn/i960/sub_n.s delete mode 100644 rts/gmp/mpn/lisp/gmpasm-mode.el delete mode 100644 rts/gmp/mpn/m68k/add_n.S delete mode 100644 rts/gmp/mpn/m68k/lshift.S delete mode 100644 rts/gmp/mpn/m68k/mc68020/addmul_1.S delete mode 100644 rts/gmp/mpn/m68k/mc68020/mul_1.S delete mode 100644 rts/gmp/mpn/m68k/mc68020/submul_1.S delete mode 100644 rts/gmp/mpn/m68k/mc68020/udiv.S delete mode 100644 rts/gmp/mpn/m68k/mc68020/umul.S delete mode 100644 rts/gmp/mpn/m68k/rshift.S delete mode 100644 rts/gmp/mpn/m68k/sub_n.S delete mode 100644 rts/gmp/mpn/m68k/syntax.h delete mode 100644 rts/gmp/mpn/m88k/add_n.s delete mode 100644 rts/gmp/mpn/m88k/mc88110/add_n.S delete mode 100644 rts/gmp/mpn/m88k/mc88110/addmul_1.s delete mode 100644 rts/gmp/mpn/m88k/mc88110/mul_1.s delete mode 100644 rts/gmp/mpn/m88k/mc88110/sub_n.S delete mode 100644 rts/gmp/mpn/m88k/mul_1.s delete mode 100644 rts/gmp/mpn/m88k/sub_n.s delete mode 100644 rts/gmp/mpn/mips2/add_n.s delete mode 100644 rts/gmp/mpn/mips2/addmul_1.s delete mode 100644 rts/gmp/mpn/mips2/lshift.s delete mode 100644 rts/gmp/mpn/mips2/mul_1.s delete mode 100644 rts/gmp/mpn/mips2/rshift.s delete mode 100644 rts/gmp/mpn/mips2/sub_n.s delete mode 100644 rts/gmp/mpn/mips2/submul_1.s delete mode 100644 rts/gmp/mpn/mips2/umul.s delete mode 100644 rts/gmp/mpn/mips3/README delete mode 100644 rts/gmp/mpn/mips3/add_n.s delete mode 100644 rts/gmp/mpn/mips3/addmul_1.s delete mode 100644 rts/gmp/mpn/mips3/gmp-mparam.h delete mode 100644 rts/gmp/mpn/mips3/lshift.s delete mode 100644 rts/gmp/mpn/mips3/mul_1.s delete mode 100644 rts/gmp/mpn/mips3/rshift.s delete mode 100644 rts/gmp/mpn/mips3/sub_n.s delete mode 100644 rts/gmp/mpn/mips3/submul_1.s delete mode 100644 rts/gmp/mpn/mp_bases.c delete mode 100644 rts/gmp/mpn/ns32k/add_n.s delete mode 100644 rts/gmp/mpn/ns32k/addmul_1.s delete mode 100644 rts/gmp/mpn/ns32k/mul_1.s delete mode 100644 rts/gmp/mpn/ns32k/sub_n.s delete mode 100644 rts/gmp/mpn/ns32k/submul_1.s delete mode 100644 rts/gmp/mpn/pa64/README delete mode 100644 rts/gmp/mpn/pa64/add_n.s delete mode 100644 rts/gmp/mpn/pa64/addmul_1.S delete mode 100644 rts/gmp/mpn/pa64/gmp-mparam.h delete mode 100644 rts/gmp/mpn/pa64/lshift.s delete mode 100644 rts/gmp/mpn/pa64/mul_1.S delete mode 100644 rts/gmp/mpn/pa64/rshift.s delete mode 100644 rts/gmp/mpn/pa64/sub_n.s delete mode 100644 rts/gmp/mpn/pa64/submul_1.S delete mode 100644 rts/gmp/mpn/pa64/udiv_qrnnd.c delete mode 100644 rts/gmp/mpn/pa64/umul_ppmm.S delete mode 100644 rts/gmp/mpn/pa64w/README delete mode 100644 rts/gmp/mpn/pa64w/add_n.s delete mode 100644 rts/gmp/mpn/pa64w/addmul_1.S delete mode 100644 rts/gmp/mpn/pa64w/gmp-mparam.h delete mode 100644 rts/gmp/mpn/pa64w/lshift.s delete mode 100644 rts/gmp/mpn/pa64w/mul_1.S delete mode 100644 rts/gmp/mpn/pa64w/rshift.s delete mode 100644 rts/gmp/mpn/pa64w/sub_n.s delete mode 100644 rts/gmp/mpn/pa64w/submul_1.S delete mode 100644 rts/gmp/mpn/pa64w/udiv_qrnnd.c delete mode 100644 rts/gmp/mpn/pa64w/umul_ppmm.S delete mode 100644 rts/gmp/mpn/power/add_n.s delete mode 100644 rts/gmp/mpn/power/addmul_1.s delete mode 100644 rts/gmp/mpn/power/lshift.s delete mode 100644 rts/gmp/mpn/power/mul_1.s delete mode 100644 rts/gmp/mpn/power/rshift.s delete mode 100644 rts/gmp/mpn/power/sdiv.s delete mode 100644 rts/gmp/mpn/power/sub_n.s delete mode 100644 rts/gmp/mpn/power/submul_1.s delete mode 100644 rts/gmp/mpn/power/umul.s delete mode 100644 rts/gmp/mpn/powerpc32/add_n.asm delete mode 100644 rts/gmp/mpn/powerpc32/addmul_1.asm delete mode 100644 rts/gmp/mpn/powerpc32/aix.m4 delete mode 100644 rts/gmp/mpn/powerpc32/gmp-mparam.h delete mode 100644 rts/gmp/mpn/powerpc32/lshift.asm delete mode 100644 rts/gmp/mpn/powerpc32/mul_1.asm delete mode 100644 rts/gmp/mpn/powerpc32/regmap.m4 delete mode 100644 rts/gmp/mpn/powerpc32/rshift.asm delete mode 100644 rts/gmp/mpn/powerpc32/sub_n.asm delete mode 100644 rts/gmp/mpn/powerpc32/submul_1.asm delete mode 100644 rts/gmp/mpn/powerpc32/umul.asm delete mode 100644 rts/gmp/mpn/powerpc64/README delete mode 100644 rts/gmp/mpn/powerpc64/add_n.asm delete mode 100644 rts/gmp/mpn/powerpc64/addmul_1.asm delete mode 100644 rts/gmp/mpn/powerpc64/addsub_n.asm delete mode 100644 rts/gmp/mpn/powerpc64/aix.m4 delete mode 100644 rts/gmp/mpn/powerpc64/copyd.asm delete mode 100644 rts/gmp/mpn/powerpc64/copyi.asm delete mode 100644 rts/gmp/mpn/powerpc64/gmp-mparam.h delete mode 100644 rts/gmp/mpn/powerpc64/lshift.asm delete mode 100644 rts/gmp/mpn/powerpc64/mul_1.asm delete mode 100644 rts/gmp/mpn/powerpc64/rshift.asm delete mode 100644 rts/gmp/mpn/powerpc64/sub_n.asm delete mode 100644 rts/gmp/mpn/powerpc64/submul_1.asm delete mode 100644 rts/gmp/mpn/pyr/add_n.s delete mode 100644 rts/gmp/mpn/pyr/addmul_1.s delete mode 100644 rts/gmp/mpn/pyr/mul_1.s delete mode 100644 rts/gmp/mpn/pyr/sub_n.s delete mode 100644 rts/gmp/mpn/sh/add_n.s delete mode 100644 rts/gmp/mpn/sh/sh2/addmul_1.s delete mode 100644 rts/gmp/mpn/sh/sh2/mul_1.s delete mode 100644 rts/gmp/mpn/sh/sh2/submul_1.s delete mode 100644 rts/gmp/mpn/sh/sub_n.s delete mode 100644 rts/gmp/mpn/sparc32/README delete mode 100644 rts/gmp/mpn/sparc32/add_n.asm delete mode 100644 rts/gmp/mpn/sparc32/addmul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/lshift.asm delete mode 100644 rts/gmp/mpn/sparc32/mul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/rshift.asm delete mode 100644 rts/gmp/mpn/sparc32/sub_n.asm delete mode 100644 rts/gmp/mpn/sparc32/submul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/udiv_fp.asm delete mode 100644 rts/gmp/mpn/sparc32/udiv_nfp.asm delete mode 100644 rts/gmp/mpn/sparc32/umul.asm delete mode 100644 rts/gmp/mpn/sparc32/v8/addmul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/v8/mul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/v8/submul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/v8/supersparc/udiv.asm delete mode 100644 rts/gmp/mpn/sparc32/v8/umul.asm delete mode 100644 rts/gmp/mpn/sparc32/v9/README delete mode 100644 rts/gmp/mpn/sparc32/v9/addmul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/v9/gmp-mparam.h delete mode 100644 rts/gmp/mpn/sparc32/v9/mul_1.asm delete mode 100644 rts/gmp/mpn/sparc32/v9/submul_1.asm delete mode 100644 rts/gmp/mpn/sparc64/README delete mode 100644 rts/gmp/mpn/sparc64/add_n.asm delete mode 100644 rts/gmp/mpn/sparc64/addmul1h.asm delete mode 100644 rts/gmp/mpn/sparc64/addmul_1.asm delete mode 100644 rts/gmp/mpn/sparc64/copyi.asm delete mode 100644 rts/gmp/mpn/sparc64/gmp-mparam.h delete mode 100644 rts/gmp/mpn/sparc64/lshift.asm delete mode 100644 rts/gmp/mpn/sparc64/mul_1.asm delete mode 100644 rts/gmp/mpn/sparc64/mul_1h.asm delete mode 100644 rts/gmp/mpn/sparc64/rshift.asm delete mode 100644 rts/gmp/mpn/sparc64/sub_n.asm delete mode 100644 rts/gmp/mpn/sparc64/submul1h.asm delete mode 100644 rts/gmp/mpn/sparc64/submul_1.asm delete mode 100644 rts/gmp/mpn/thumb/add_n.s delete mode 100644 rts/gmp/mpn/thumb/sub_n.s delete mode 100644 rts/gmp/mpn/underscore.h delete mode 100644 rts/gmp/mpn/vax/add_n.s delete mode 100644 rts/gmp/mpn/vax/addmul_1.s delete mode 100644 rts/gmp/mpn/vax/lshift.s delete mode 100644 rts/gmp/mpn/vax/mul_1.s delete mode 100644 rts/gmp/mpn/vax/rshift.s delete mode 100644 rts/gmp/mpn/vax/sub_n.s delete mode 100644 rts/gmp/mpn/vax/submul_1.s delete mode 100644 rts/gmp/mpn/x86/README delete mode 100644 rts/gmp/mpn/x86/README.family delete mode 100644 rts/gmp/mpn/x86/addsub_n.S delete mode 100644 rts/gmp/mpn/x86/aors_n.asm delete mode 100644 rts/gmp/mpn/x86/aorsmul_1.asm delete mode 100644 rts/gmp/mpn/x86/copyd.asm delete mode 100644 rts/gmp/mpn/x86/copyi.asm delete mode 100644 rts/gmp/mpn/x86/diveby3.asm delete mode 100644 rts/gmp/mpn/x86/divrem_1.asm delete mode 100644 rts/gmp/mpn/x86/k6/README delete mode 100644 rts/gmp/mpn/x86/k6/aors_n.asm delete mode 100644 rts/gmp/mpn/x86/k6/aorsmul_1.asm delete mode 100644 rts/gmp/mpn/x86/k6/cross.pl delete mode 100644 rts/gmp/mpn/x86/k6/diveby3.asm delete mode 100644 rts/gmp/mpn/x86/k6/gmp-mparam.h delete mode 100644 rts/gmp/mpn/x86/k6/k62mmx/copyd.asm delete mode 100644 rts/gmp/mpn/x86/k6/k62mmx/copyi.asm delete mode 100644 rts/gmp/mpn/x86/k6/k62mmx/lshift.asm delete mode 100644 rts/gmp/mpn/x86/k6/k62mmx/rshift.asm delete mode 100644 rts/gmp/mpn/x86/k6/mmx/com_n.asm delete mode 100644 rts/gmp/mpn/x86/k6/mmx/logops_n.asm delete mode 100644 rts/gmp/mpn/x86/k6/mmx/lshift.asm delete mode 100644 rts/gmp/mpn/x86/k6/mmx/popham.asm delete mode 100644 rts/gmp/mpn/x86/k6/mmx/rshift.asm delete mode 100644 rts/gmp/mpn/x86/k6/mul_1.asm delete mode 100644 rts/gmp/mpn/x86/k6/mul_basecase.asm delete mode 100644 rts/gmp/mpn/x86/k6/sqr_basecase.asm delete mode 100644 rts/gmp/mpn/x86/k7/README delete mode 100644 rts/gmp/mpn/x86/k7/aors_n.asm delete mode 100644 rts/gmp/mpn/x86/k7/aorsmul_1.asm delete mode 100644 rts/gmp/mpn/x86/k7/diveby3.asm delete mode 100644 rts/gmp/mpn/x86/k7/gmp-mparam.h delete mode 100644 rts/gmp/mpn/x86/k7/mmx/copyd.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/copyi.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/divrem_1.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/lshift.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/mod_1.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/popham.asm delete mode 100644 rts/gmp/mpn/x86/k7/mmx/rshift.asm delete mode 100644 rts/gmp/mpn/x86/k7/mul_1.asm delete mode 100644 rts/gmp/mpn/x86/k7/mul_basecase.asm delete mode 100644 rts/gmp/mpn/x86/k7/sqr_basecase.asm delete mode 100644 rts/gmp/mpn/x86/lshift.asm delete mode 100644 rts/gmp/mpn/x86/mod_1.asm delete mode 100644 rts/gmp/mpn/x86/mul_1.asm delete mode 100644 rts/gmp/mpn/x86/mul_basecase.asm delete mode 100644 rts/gmp/mpn/x86/p6/README delete mode 100644 rts/gmp/mpn/x86/p6/aorsmul_1.asm delete mode 100644 rts/gmp/mpn/x86/p6/diveby3.asm delete mode 100644 rts/gmp/mpn/x86/p6/gmp-mparam.h delete mode 100644 rts/gmp/mpn/x86/p6/mmx/divrem_1.asm delete mode 100644 rts/gmp/mpn/x86/p6/mmx/mod_1.asm delete mode 100644 rts/gmp/mpn/x86/p6/mmx/popham.asm delete mode 100644 rts/gmp/mpn/x86/p6/p3mmx/popham.asm delete mode 100644 rts/gmp/mpn/x86/p6/sqr_basecase.asm delete mode 100644 rts/gmp/mpn/x86/pentium/README delete mode 100644 rts/gmp/mpn/x86/pentium/aors_n.asm delete mode 100644 rts/gmp/mpn/x86/pentium/aorsmul_1.asm delete mode 100644 rts/gmp/mpn/x86/pentium/diveby3.asm delete mode 100644 rts/gmp/mpn/x86/pentium/gmp-mparam.h delete mode 100644 rts/gmp/mpn/x86/pentium/lshift.asm delete mode 100644 rts/gmp/mpn/x86/pentium/mmx/gmp-mparam.h delete mode 100644 rts/gmp/mpn/x86/pentium/mmx/lshift.asm delete mode 100644 rts/gmp/mpn/x86/pentium/mmx/popham.asm delete mode 100644 rts/gmp/mpn/x86/pentium/mmx/rshift.asm delete mode 100644 rts/gmp/mpn/x86/pentium/mul_1.asm delete mode 100644 rts/gmp/mpn/x86/pentium/mul_basecase.asm delete mode 100644 rts/gmp/mpn/x86/pentium/rshift.asm delete mode 100644 rts/gmp/mpn/x86/pentium/sqr_basecase.asm delete mode 100644 rts/gmp/mpn/x86/rshift.asm delete mode 100644 rts/gmp/mpn/x86/udiv.asm delete mode 100644 rts/gmp/mpn/x86/umul.asm delete mode 100644 rts/gmp/mpn/x86/x86-defs.m4 delete mode 100644 rts/gmp/mpn/z8000/add_n.s delete mode 100644 rts/gmp/mpn/z8000/gmp-mparam.h delete mode 100644 rts/gmp/mpn/z8000/mul_1.s delete mode 100644 rts/gmp/mpn/z8000/sub_n.s delete mode 100644 rts/gmp/mpn/z8000x/add_n.s delete mode 100644 rts/gmp/mpn/z8000x/sub_n.s delete mode 100644 rts/gmp/mpz/Makefile.am delete mode 100644 rts/gmp/mpz/Makefile.in delete mode 100644 rts/gmp/mpz/README delete mode 100644 rts/gmp/mpz/abs.c delete mode 100644 rts/gmp/mpz/add.c delete mode 100644 rts/gmp/mpz/add_ui.c delete mode 100644 rts/gmp/mpz/addmul_ui.c delete mode 100644 rts/gmp/mpz/and.c delete mode 100644 rts/gmp/mpz/array_init.c delete mode 100644 rts/gmp/mpz/bin_ui.c delete mode 100644 rts/gmp/mpz/bin_uiui.c delete mode 100644 rts/gmp/mpz/cdiv_q.c delete mode 100644 rts/gmp/mpz/cdiv_q_ui.c delete mode 100644 rts/gmp/mpz/cdiv_qr.c delete mode 100644 rts/gmp/mpz/cdiv_qr_ui.c delete mode 100644 rts/gmp/mpz/cdiv_r.c delete mode 100644 rts/gmp/mpz/cdiv_r_ui.c delete mode 100644 rts/gmp/mpz/cdiv_ui.c delete mode 100644 rts/gmp/mpz/clear.c delete mode 100644 rts/gmp/mpz/clrbit.c delete mode 100644 rts/gmp/mpz/cmp.c delete mode 100644 rts/gmp/mpz/cmp_si.c delete mode 100644 rts/gmp/mpz/cmp_ui.c delete mode 100644 rts/gmp/mpz/cmpabs.c delete mode 100644 rts/gmp/mpz/cmpabs_ui.c delete mode 100644 rts/gmp/mpz/com.c delete mode 100644 rts/gmp/mpz/divexact.c delete mode 100644 rts/gmp/mpz/dump.c delete mode 100644 rts/gmp/mpz/fac_ui.c delete mode 100644 rts/gmp/mpz/fdiv_q.c delete mode 100644 rts/gmp/mpz/fdiv_q_2exp.c delete mode 100644 rts/gmp/mpz/fdiv_q_ui.c delete mode 100644 rts/gmp/mpz/fdiv_qr.c delete mode 100644 rts/gmp/mpz/fdiv_qr_ui.c delete mode 100644 rts/gmp/mpz/fdiv_r.c delete mode 100644 rts/gmp/mpz/fdiv_r_2exp.c delete mode 100644 rts/gmp/mpz/fdiv_r_ui.c delete mode 100644 rts/gmp/mpz/fdiv_ui.c delete mode 100644 rts/gmp/mpz/fib_ui.c delete mode 100644 rts/gmp/mpz/fits_sint_p.c delete mode 100644 rts/gmp/mpz/fits_slong_p.c delete mode 100644 rts/gmp/mpz/fits_sshort_p.c delete mode 100644 rts/gmp/mpz/fits_uint_p.c delete mode 100644 rts/gmp/mpz/fits_ulong_p.c delete mode 100644 rts/gmp/mpz/fits_ushort_p.c delete mode 100644 rts/gmp/mpz/gcd.c delete mode 100644 rts/gmp/mpz/gcd_ui.c delete mode 100644 rts/gmp/mpz/gcdext.c delete mode 100644 rts/gmp/mpz/get_d.c delete mode 100644 rts/gmp/mpz/get_si.c delete mode 100644 rts/gmp/mpz/get_str.c delete mode 100644 rts/gmp/mpz/get_ui.c delete mode 100644 rts/gmp/mpz/getlimbn.c delete mode 100644 rts/gmp/mpz/hamdist.c delete mode 100644 rts/gmp/mpz/init.c delete mode 100644 rts/gmp/mpz/inp_raw.c delete mode 100644 rts/gmp/mpz/inp_str.c delete mode 100644 rts/gmp/mpz/invert.c delete mode 100644 rts/gmp/mpz/ior.c delete mode 100644 rts/gmp/mpz/iset.c delete mode 100644 rts/gmp/mpz/iset_d.c delete mode 100644 rts/gmp/mpz/iset_si.c delete mode 100644 rts/gmp/mpz/iset_str.c delete mode 100644 rts/gmp/mpz/iset_ui.c delete mode 100644 rts/gmp/mpz/jacobi.c delete mode 100644 rts/gmp/mpz/kronsz.c delete mode 100644 rts/gmp/mpz/kronuz.c delete mode 100644 rts/gmp/mpz/kronzs.c delete mode 100644 rts/gmp/mpz/kronzu.c delete mode 100644 rts/gmp/mpz/lcm.c delete mode 100644 rts/gmp/mpz/legendre.c delete mode 100644 rts/gmp/mpz/mod.c delete mode 100644 rts/gmp/mpz/mul.c delete mode 100644 rts/gmp/mpz/mul_2exp.c delete mode 100644 rts/gmp/mpz/mul_siui.c delete mode 100644 rts/gmp/mpz/neg.c delete mode 100644 rts/gmp/mpz/nextprime.c delete mode 100644 rts/gmp/mpz/out_raw.c delete mode 100644 rts/gmp/mpz/out_str.c delete mode 100644 rts/gmp/mpz/perfpow.c delete mode 100644 rts/gmp/mpz/perfsqr.c delete mode 100644 rts/gmp/mpz/popcount.c delete mode 100644 rts/gmp/mpz/pow_ui.c delete mode 100644 rts/gmp/mpz/powm.c delete mode 100644 rts/gmp/mpz/powm_ui.c delete mode 100644 rts/gmp/mpz/pprime_p.c delete mode 100644 rts/gmp/mpz/random.c delete mode 100644 rts/gmp/mpz/random2.c delete mode 100644 rts/gmp/mpz/realloc.c delete mode 100644 rts/gmp/mpz/remove.c delete mode 100644 rts/gmp/mpz/root.c delete mode 100644 rts/gmp/mpz/rrandomb.c delete mode 100644 rts/gmp/mpz/scan0.c delete mode 100644 rts/gmp/mpz/scan1.c delete mode 100644 rts/gmp/mpz/set.c delete mode 100644 rts/gmp/mpz/set_d.c delete mode 100644 rts/gmp/mpz/set_f.c delete mode 100644 rts/gmp/mpz/set_q.c delete mode 100644 rts/gmp/mpz/set_si.c delete mode 100644 rts/gmp/mpz/set_str.c delete mode 100644 rts/gmp/mpz/set_ui.c delete mode 100644 rts/gmp/mpz/setbit.c delete mode 100644 rts/gmp/mpz/size.c delete mode 100644 rts/gmp/mpz/sizeinbase.c delete mode 100644 rts/gmp/mpz/sqrt.c delete mode 100644 rts/gmp/mpz/sqrtrem.c delete mode 100644 rts/gmp/mpz/sub.c delete mode 100644 rts/gmp/mpz/sub_ui.c delete mode 100644 rts/gmp/mpz/swap.c delete mode 100644 rts/gmp/mpz/tdiv_q.c delete mode 100644 rts/gmp/mpz/tdiv_q_2exp.c delete mode 100644 rts/gmp/mpz/tdiv_q_ui.c delete mode 100644 rts/gmp/mpz/tdiv_qr.c delete mode 100644 rts/gmp/mpz/tdiv_qr_ui.c delete mode 100644 rts/gmp/mpz/tdiv_r.c delete mode 100644 rts/gmp/mpz/tdiv_r_2exp.c delete mode 100644 rts/gmp/mpz/tdiv_r_ui.c delete mode 100644 rts/gmp/mpz/tdiv_ui.c delete mode 100644 rts/gmp/mpz/tstbit.c delete mode 100644 rts/gmp/mpz/ui_pow_ui.c delete mode 100644 rts/gmp/mpz/urandomb.c delete mode 100644 rts/gmp/mpz/urandomm.c delete mode 100644 rts/gmp/mpz/xor.c delete mode 100644 rts/gmp/rand.c delete mode 100644 rts/gmp/randclr.c delete mode 100644 rts/gmp/randlc.c delete mode 100644 rts/gmp/randlc2x.c delete mode 100644 rts/gmp/randraw.c delete mode 100644 rts/gmp/randsd.c delete mode 100644 rts/gmp/randsdui.c delete mode 100644 rts/gmp/stack-alloc.c delete mode 100644 rts/gmp/stack-alloc.h delete mode 100644 rts/gmp/stamp-h.in delete mode 100644 rts/gmp/stamp-vti delete mode 100644 rts/gmp/urandom.h delete mode 100644 rts/gmp/version.c delete mode 100644 rts/gmp/version.texi diff --git a/Makefile b/Makefile index 2902bbf..a2337f0 100644 --- a/Makefile +++ b/Makefile @@ -59,12 +59,12 @@ include $(TOP)/mk/boilerplate.mk # We can't 'make boot' in libraries until stage1 is built ifeq "$(BootingFromHc)" "YES" -SUBDIRS_BUILD = includes rts compat compiler docs utils driver +SUBDIRS_BUILD = gmp includes rts compat compiler docs utils driver else -SUBDIRS_BUILD = includes compat utils driver docs compiler rts +SUBDIRS_BUILD = gmp includes compat utils driver docs compiler rts endif -SUBDIRS = includes compat utils driver docs rts libraries compiler +SUBDIRS = gmp includes compat utils driver docs rts libraries compiler # Sanity check that all the core libraries are in the tree, to catch # failure to run darcs-all. @@ -261,6 +261,7 @@ binary-dist-pre:: $(MKDIRHIER) $(BIN_DIST_DIR)/share binary-dist:: + $(MAKE) -C gmp binary-dist DOING_BIN_DIST=YES $(MAKE) -C includes binary-dist DOING_BIN_DIST=YES $(MAKE) -C compiler binary-dist DOING_BIN_DIST=YES $(INSTALL_STAGE) # XXX $(MAKE) -C docs binary-dist DOING_BIN_DIST=YES diff --git a/boot b/boot index 262ae52..14d886a 100644 --- a/boot +++ b/boot @@ -13,7 +13,6 @@ do done chmod +x push-all -chmod +x rts/gmp/configure echo "Booting ." autoreconf diff --git a/gmp/Makefile b/gmp/Makefile new file mode 100644 index 0000000..18d0b75 --- /dev/null +++ b/gmp/Makefile @@ -0,0 +1,110 @@ + +TOP=.. + +include $(TOP)/mk/boilerplate.mk + +# ----------------------------------------------------------------------------- +# Compile GMP only if we don't have it already +# +# We use GMP's own configuration stuff, because it's all rather hairy +# and not worth re-implementing in our Makefile framework. + +ifneq "$(HaveLibGmp)" "YES" +ifneq "$(HaveFrameworkGMP)" "YES" + +boot :: stamp.gmp + +PLATFORM := $(shell echo $(HOSTPLATFORM) | sed 's/i[567]86/i486/g') + +# 2007-07-05 +# We do +# set -o igncr; export SHELLOPTS +# here as otherwise checking the size of limbs +# makes the build fall over on Cygwin. See the thread +# http://www.cygwin.com/ml/cygwin/2006-12/msg00011.html +# for more details. + +# 2007-07-05 +# Passing +# as_ln_s='cp -p' +# isn't sufficient to stop cygwin using symlinks the mingw gcc can't +# follow, as it isn't used consistently. Instead we put an ln.bat in +# path that always fails. + +GMP_TARBALL := $(firstword $(wildcard gmp*.tar.gz)) +GMP_DIR := $(subst .tar.gz,,$(GMP_TARBALL)) +BMP_BUILD_DIR := build + +stamp.gmp: + $(RM) -rf $(GMP_DIR) gmpbuild + $(TAR) -zxf $(GMP_TARBALL) + mv $(GMP_DIR) gmpbuild + chmod +x ln + set -o igncr; export SHELLOPTS; \ + export PATH=`pwd`:$$PATH; \ + cd gmpbuild && \ + CC=$(WhatGccIsCalled) $(SHELL) configure \ + --enable-shared=no --host=$(PLATFORM) --build=$(PLATFORM) + touch $@ + +all :: gmpbuild/libgmp.a + +ifeq "$(DLLized)" "YES" +all :: $(DLL_PEN)/gmp.dll + +$(DLL_PEN)/gmp.dll: + $(MAKE) -C gmpbuild gmp.dll + $(CP) gmpbuild/gmp.dll $(DLL_PEN) +endif + +install :: gmpbuild/libgmp.a + +INSTALL_LIBS += gmpbuild/libgmp.a + +gmpbuild/libgmp.a :: + $(MAKE) -C gmpbuild MAKEFLAGS= + $(CP) gmpbuild/.libs/libgmp.a gmpbuild + $(RANLIB) gmpbuild/libgmp.a +endif +endif + +clean distclean maintainer-clean :: + $(RM) -f stamp.gmp + $(RM) -rf gmpbuild + $(RM) -rf gmpbuild + +#----------------------------------------------------------------------------- +# +# Files to install +# +# Just libHSrts is installed uniformly across ways +# +ifeq "$(DLLized)" "YES" +INSTALL_PROGS += gmpbuild/gmp.dll +INSTALL_LIBS += gmpbuild/libgmp_imp.a +endif + +#----------------------------------------------------------------------------- +# +# binary-dist + +include $(TOP)/mk/target.mk + +binary-dist: + @: +ifneq "$(HaveLibGmp)" "YES" +ifneq "$(HaveFrameworkGMP)" "YES" + $(INSTALL_DIR) $(BIN_DIST_DIR)/gmp + $(INSTALL_DIR) $(BIN_DIST_DIR)/gmp/gmpbuild + touch $(BIN_DIST_DIR)/gmp/$(GMP_TARBALL) + $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/gmp/ +ifneq "$(INSTALL_PROGS)" "" + $(INSTALL_DATA) $(INSTALL_PROGS) $(BIN_DIST_DIR)/gmp/gmpbuild/ +endif +ifneq "$(INSTALL_LIBS)" "" + $(INSTALL_DATA) $(INSTALL_LIBS) $(BIN_DIST_DIR)/gmp/gmpbuild/ +endif + +endif +endif + diff --git a/gmp/gmp-4.2.1.tar.gz b/gmp/gmp-4.2.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ed0e97c2cbece1ab971b3fb255ae32afc1375c4 GIT binary patch literal 2249464 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%0AU10VqmdjWvtn>PRypfqIWP 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®%o}Xqhdw!Z`_S7o4Kq_+2Pcz}3pJu>4 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 z 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 z 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%0DCKtxQjy6bG4;;oVpHxS+ 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

j!_;XQbX5} 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%0AYm>xFMo>WiqI?Mlu|aoG95=Qq&HeDCzCV4 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

+R0r)L)2%@1gf6v@URzI6MdSTrIS;jOjNFZw7 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 z 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%0Ah|M0~iLC0LHJPGa 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 z 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

Ge=KizF|NL#mIzAgCQf>wCK%IhMm{qP<0|`gbD| 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 z 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

VECy}7fw+jfPA;1 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

}BR9G|L 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�h6y+CF6 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

h<<5V|>ZQI%p$WX-v{1hAMB_E}!FjzzVB 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

=RYp^hz1O`xvH|`TczhQ+|fFy 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 -echo / -set __gmpz_dump ($->_mp_den) -end - -define pf -set __gmpf_dump ($) -end - diff --git a/rts/gmp/AUTHORS b/rts/gmp/AUTHORS deleted file mode 100644 index 1fa057a..0000000 --- a/rts/gmp/AUTHORS +++ /dev/null @@ -1,12 +0,0 @@ -Authors if GNU MP (in chronological order) -Torbjörn Granlund -John Amanatides -Paul Zimmermann -Ken Weber -Bennet Yee -Andreas Schwab -Robert Harley -Linus Nordberg -Kent Boortz -Kevin Ryde -Guillaume Hanrot diff --git a/rts/gmp/COPYING b/rts/gmp/COPYING deleted file mode 100644 index a6d7d01..0000000 --- a/rts/gmp/COPYING +++ /dev/null @@ -1,336 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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. - - - Copyright (C) - - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. Hereny 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 Section \ No newline at end of file diff --git a/rts/gmp/COPYING.LIB b/rts/gmp/COPYING.LIB deleted file mode 100644 index c4792dd..0000000 --- a/rts/gmp/COPYING.LIB +++ /dev/null @@ -1,515 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -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 and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. -^L - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. -^L - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, 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 library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete 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 distribute a copy of this License along with the -Library. - - 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 Library or any portion -of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -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 Library, 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 Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. -^L - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you 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. - - If distribution of 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 satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. -^L - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be 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. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. -^L - 7. 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 not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library 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. - - 9. 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 Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -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 with -this License. -^L - 11. 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 Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library 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 Library. - -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. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library 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. - - 13. The Free Software Foundation may publish revised and/or new -versions of the 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 -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 Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. -^L - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -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 - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. 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 LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS -^L - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -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. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper -mail. - -You should also get your employer (if you work as a programmer) or -your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James -Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/rts/gmp/INSTALL b/rts/gmp/INSTALL deleted file mode 100644 index 62faa1a..0000000 --- a/rts/gmp/INSTALL +++ /dev/null @@ -1,146 +0,0 @@ - - INSTALLING GNU MP - ================= - - -These instructions are only for the impatient. Others should read the install -instructions in the manual, gmp.info. Use - - info -f ./gmp.info - -or in emacs - - C-u C-h i gmp.info - - -Here are some brief instructions on how to install GMP, and some examples to -help you get started using GMP. - -First, you need to compile, and optionally install, GMP. Since you're -impatient, try this: - - ./configure; make - -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. - -Next, try some small test programs, for example the ones below. - -In GMP programs, all variables need to be initialized before they are -assigned, and cleared out before program flow leaves the scope in which they -were declared. Here is an example program that reads two numbers from the -command line, multiplies them, and prints the result to stdout. - - - #include - #include /* All GMP programs need to include gmp.h */ - - main (int argc, char **argv) - { - mpz_t a, b, p; - - if (argc != 3) - { printf ("Usage: %s \n", argv[0]); exit (1); } - - /* Initialize variables */ - mpz_init (a); - mpz_init (b); - mpz_init (p); - - /* Assign a and b from base 10 strings in argv */ - mpz_set_str (a, argv[1], 10); - mpz_set_str (b, argv[2], 10); - - /* Multiply a and b and put the result in p */ - mpz_mul (p, a, b); - - /* Print p in base 10 */ - mpz_out_str (stdout, 10, p); - fputc ('\n', stdout); - - /* Clear out variables */ - mpz_clear (a); - mpz_clear (b); - mpz_clear (p); - exit (0); - } - - -This might look tedious, with all the initializing and clearing. Fortunately -some of these operations can be combined, and other operations can often be -avoided. An experienced GMP user might write: - - - #include - #include - - main (int argc, char **argv) - { - mpz_t a, b, p; - - if (argc != 3) - { printf ("Usage: %s \n", argv[0]); exit (1); } - - /* Initialize and assign a and b from base 10 strings in argv */ - mpz_init_set_str (a, argv[1], 10); - mpz_init_set_str (b, argv[2], 10); - /* Initialize p */ - mpz_init (p); - - /* Multiply a and b and put the result in p */ - mpz_mul (p, a, b); - - /* Print p in base 10 */ - mpz_out_str (stdout, 10, p); - fputc ('\n', stdout); - - /* Since we're about to exit, no need to clear out variables */ - exit (0); - } - - -Now you have to compile your test program, and link it with the GMP library. -Assuming your working directory is still the gmp source directory, and your -source file is called example.c, enter: - - gcc -g -I. example.c .libs/libgmp.a - -After installing, the command becomes: "gcc -g example.c -lgmp". Also, GMP is -libtool based so you can use that to link if you want. - -Now try to run the example: - - ./a.out 98365871231256752134 319378318340103345227 - 31415926535897932384618573336104570964418 - -The functions used here all operate on signed integers, and have names -starting with "mpz_". There are many more such functions than used in these -examples. See the chapter "Integer Functions" in the manual, for a complete -list. - -There are two other main classes of functions in GMP. They operate on -rational numbers and floating-point numbers, respectively. The chapters -"Rational Number Functions", and "Floating-point Functions" document these -classes. - -To run a set of tests, do "make check". This will take a while. - -To create the printable documentation from the texinfo source, type "make -gmp.dvi" or "make gmp.ps". This requires various "tex" commands. - -To install the library, do "make install" (then you can use -lgmp instead of -.libs/libgmp.a). - -If you decide to use 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 bug-gmp@gnu.org. - - - ----------------- -Local variables: -mode: text -fill-column: 78 -End: diff --git a/rts/gmp/Makefile.am b/rts/gmp/Makefile.am deleted file mode 100644 index b73b805..0000000 --- a/rts/gmp/Makefile.am +++ /dev/null @@ -1,197 +0,0 @@ -## Process this file with automake to generate Makefile.in - - -# Copyright (C) 1991, 1993, 1994, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# make check -# -# It'd be good if "make check" first did a "make all" or whatever to -# build libgmp.la, but it's not clear how best to do this. Putting a -# "check:" target is overridden by automake, and a "check-local:" runs -# too late (due to depth-first subdirectory processing). For now it's -# necessary to do "make && make check". -# -# MPF_OBJECTS etc -# -# Libtool needs all the .lo files passed to it if it's going to build -# both a static and shared library. If a convenience library like -# mpf/libmpf.la is passed then the resulting libgmp.a gets the PIC .lo -# objects rather than the non-PIC .o's. -# -# Unfortunately this leads to the big lists of objects below. 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. - - -# Libtool -version-info for libgmp.la and libmp.la. See (libtool)Versioning -# -# 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 and libmp, only do it just before a release. -# -# GMP -version-info -# release libgmp 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 -# -# -# Starting at 3:0:0 is a slight abuse of the versioning system, but it -# ensures we're past soname libgmp.so.2, which is what has been 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. - -LIBGMP_LT_CURRENT = 4 -LIBGMP_LT_REVISION = 1 -LIBGMP_LT_AGE = 1 - -LIBMP_LT_CURRENT = 4 -LIBMP_LT_REVISION = 1 -LIBMP_LT_AGE = 1 - - -AUTOMAKE_OPTIONS = gnu check-news no-dependencies ansi2knr - -SUBDIRS = mpn mpz mpq mpf mpbsd mpfr tests demos tune - -include_HEADERS = gmp.h $(MPBSD_HEADERS_OPTION) $(MPFR_HEADERS_OPTION) -EXTRA_HEADERS = mp.h - -lib_LTLIBRARIES = libgmp.la $(MPBSD_LTLIBRARIES_OPTION) - -EXTRA_DIST = .gdbinit gmp-impl.h longlong.h stack-alloc.h urandom.h doc macos - -DISTCLEANFILES = asm-syntax.h config.m4 @gmp_srclinks@ - - -MPF_OBJECTS = mpf/init.lo mpf/init2.lo mpf/set.lo mpf/set_ui.lo mpf/set_si.lo \ - mpf/set_str.lo mpf/set_d.lo mpf/set_z.lo mpf/iset.lo mpf/iset_ui.lo \ - mpf/iset_si.lo mpf/iset_str.lo mpf/iset_d.lo mpf/clear.lo mpf/get_str.lo \ - mpf/dump.lo mpf/size.lo mpf/eq.lo mpf/reldiff.lo mpf/sqrt.lo mpf/random2.lo \ - mpf/inp_str.lo mpf/out_str.lo mpf/add.lo mpf/add_ui.lo mpf/sub.lo \ - mpf/sub_ui.lo mpf/ui_sub.lo mpf/mul.lo mpf/mul_ui.lo mpf/div.lo \ - mpf/div_ui.lo mpf/cmp.lo mpf/cmp_ui.lo mpf/cmp_si.lo mpf/mul_2exp.lo \ - mpf/div_2exp.lo mpf/abs.lo mpf/neg.lo mpf/set_q.lo mpf/get_d.lo \ - mpf/set_dfl_prec.lo mpf/set_prc.lo mpf/set_prc_raw.lo mpf/get_prc.lo \ - mpf/ui_div.lo mpf/sqrt_ui.lo mpf/floor.lo mpf/ceil.lo mpf/trunc.lo \ - mpf/pow_ui.lo mpf/urandomb.lo mpf/swap.lo -MPZ_OBJECTS = mpz/abs.lo mpz/add.lo mpz/add_ui.lo mpz/addmul_ui.lo mpz/and.lo \ - mpz/array_init.lo mpz/bin_ui.lo mpz/bin_uiui.lo mpz/cdiv_q.lo \ - mpz/cdiv_q_ui.lo mpz/cdiv_qr.lo mpz/cdiv_qr_ui.lo mpz/cdiv_r.lo \ - mpz/cdiv_r_ui.lo mpz/cdiv_ui.lo mpz/clear.lo mpz/clrbit.lo mpz/cmp.lo \ - mpz/cmp_si.lo mpz/cmp_ui.lo mpz/cmpabs.lo mpz/cmpabs_ui.lo mpz/com.lo \ - mpz/divexact.lo mpz/dump.lo mpz/fac_ui.lo mpz/fdiv_q.lo mpz/fdiv_q_2exp.lo \ - mpz/fdiv_q_ui.lo mpz/fdiv_qr.lo mpz/fdiv_qr_ui.lo mpz/fdiv_r.lo \ - mpz/fdiv_r_2exp.lo mpz/fdiv_r_ui.lo mpz/fdiv_ui.lo mpz/fib_ui.lo \ - mpz/fits_sint_p.lo mpz/fits_slong_p.lo mpz/fits_sshort_p.lo \ - mpz/fits_uint_p.lo mpz/fits_ulong_p.lo mpz/fits_ushort_p.lo mpz/gcd.lo \ - mpz/gcd_ui.lo mpz/gcdext.lo mpz/get_d.lo mpz/get_si.lo mpz/get_str.lo \ - mpz/get_ui.lo mpz/getlimbn.lo mpz/hamdist.lo mpz/init.lo mpz/inp_raw.lo \ - mpz/inp_str.lo mpz/invert.lo mpz/ior.lo mpz/iset.lo mpz/iset_d.lo \ - mpz/iset_si.lo mpz/iset_str.lo mpz/iset_ui.lo mpz/jacobi.lo \ - mpz/kronsz.lo mpz/kronuz.lo mpz/kronzs.lo mpz/kronzu.lo \ - mpz/lcm.lo mpz/legendre.lo \ - mpz/mod.lo mpz/mul.lo mpz/mul_2exp.lo mpz/mul_si.lo mpz/mul_ui.lo \ - mpz/neg.lo mpz/nextprime.lo mpz/out_raw.lo mpz/out_str.lo mpz/perfpow.lo mpz/perfsqr.lo \ - mpz/popcount.lo mpz/pow_ui.lo mpz/powm.lo mpz/powm_ui.lo mpz/pprime_p.lo \ - mpz/random.lo mpz/random2.lo mpz/realloc.lo mpz/remove.lo mpz/root.lo \ - mpz/rrandomb.lo \ - mpz/scan0.lo mpz/scan1.lo mpz/set.lo mpz/set_d.lo mpz/set_f.lo mpz/set_q.lo \ - mpz/set_si.lo mpz/set_str.lo mpz/set_ui.lo mpz/setbit.lo mpz/size.lo \ - mpz/sizeinbase.lo mpz/sqrt.lo mpz/sqrtrem.lo mpz/sub.lo mpz/sub_ui.lo \ - mpz/swap.lo mpz/tdiv_ui.lo mpz/tdiv_q.lo mpz/tdiv_q_2exp.lo mpz/tdiv_q_ui.lo \ - mpz/tdiv_qr.lo mpz/tdiv_qr_ui.lo mpz/tdiv_r.lo mpz/tdiv_r_2exp.lo \ - mpz/tdiv_r_ui.lo mpz/tstbit.lo mpz/ui_pow_ui.lo mpz/urandomb.lo \ - mpz/urandomm.lo mpz/xor.lo -MPQ_OBJECTS = mpq/add.lo mpq/canonicalize.lo mpq/clear.lo mpq/cmp.lo \ - mpq/cmp_ui.lo mpq/div.lo mpq/get_d.lo mpq/get_den.lo mpq/get_num.lo \ - mpq/init.lo mpq/inv.lo mpq/mul.lo mpq/neg.lo mpq/out_str.lo \ - mpq/set.lo mpq/set_den.lo \ - mpq/set_num.lo mpq/set_si.lo mpq/set_ui.lo mpq/sub.lo mpq/equal.lo \ - mpq/set_z.lo mpq/set_d.lo mpq/swap.lo -MPN_OBJECTS = @mpn_objs_in_libgmp@ - -MPBSD_OBJECTS = mpbsd/add.lo mpbsd/tdiv_qr.lo mpbsd/move.lo mpbsd/powm.lo \ - mpbsd/sub.lo mpbsd/cmp.lo mpbsd/mfree.lo mpbsd/mtox.lo mpbsd/realloc.lo \ - mpbsd/gcd.lo mpbsd/itom.lo mpbsd/min.lo mpbsd/mul.lo mpbsd/mout.lo \ - mpbsd/pow_ui.lo mpbsd/sdiv.lo mpbsd/sqrtrem.lo mpbsd/xtom.lo - -# FIXME: Add mpfr/rnd_mode.lo when it's clean. -MPFR_OBJECTS = mpfr/add.lo mpfr/div_2exp.lo mpfr/neg.lo mpfr/set_dfl_prec.lo \ - mpfr/set_str_raw.lo mpfr/agm.lo mpfr/get_str.lo mpfr/print_raw.lo \ - mpfr/set_dfl_rnd.lo mpfr/sqrt.lo mpfr/clear.lo mpfr/init.lo \ - mpfr/set_f.lo mpfr/sub.lo mpfr/cmp.lo mpfr/mul.lo mpfr/round.lo \ - mpfr/set_prec.lo mpfr/cmp_ui.lo mpfr/mul_2exp.lo mpfr/set.lo mpfr/set_si.lo \ - mpfr/div.lo mpfr/mul_ui.lo mpfr/set_d.lo mpfr/pow.lo mpfr/out_str.lo \ - mpfr/pi.lo mpfr/set_z.lo mpfr/add_ulp.lo mpfr/log2.lo mpfr/random.lo \ - mpfr/log.lo mpfr/exp.lo mpfr/div_ui.lo mpfr/zeta.lo mpfr/karadiv.lo \ - mpfr/karasqrt.lo mpfr/print_rnd_mode.lo - - -if WANT_MPFR -MPFR_HEADERS_OPTION = mpfr/mpfr.h -MPFR_OBJECTS_OPTION = $(MPFR_OBJECTS) -MPFR_LIBADD_OPTION = -lm -endif -libgmp_la_SOURCES = assert.c compat.c errno.c memory.c mp_set_fns.c \ - mp_clz_tab.c mp_minv_tab.c \ - rand.c randclr.c randlc.c randlc2x.c randraw.c randsd.c \ - randsdui.c version.c stack-alloc.c mp_bpl.c extract-dbl.c insert-dbl.c -libgmp_la_DEPENDENCIES = \ - $(MPF_OBJECTS) $(MPZ_OBJECTS) $(MPN_OBJECTS) $(MPQ_OBJECTS) \ - $(MPFR_OBJECTS_OPTION) -libgmp_la_LIBADD = $(libgmp_la_DEPENDENCIES) $(MPFR_LIBADD_OPTION) -libgmp_la_LDFLAGS = \ - -version-info $(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) - - -if WANT_MPBSD -MPBSD_HEADERS_OPTION = mp.h -MPBSD_LTLIBRARIES_OPTION = libmp.la -endif -libmp_la_SOURCES = assert.c errno.c memory.c mp_bpl.c mp_clz_tab.c \ - mp_minv_tab.c mp_set_fns.c stack-alloc.c -libmp_la_DEPENDENCIES = $(MPBSD_OBJECTS) $(MPN_OBJECTS) \ - mpz/add.lo mpz/clear.lo mpz/cmp.lo mpz/init.lo mpz/mod.lo mpz/mul.lo \ - mpz/mul_2exp.lo mpz/realloc.lo mpz/set.lo mpz/set_ui.lo mpz/tdiv_r.lo \ - mpz/sub.lo -libmp_la_LIBADD = $(libmp_la_DEPENDENCIES) -libmp_la_LDFLAGS = \ - -version-info $(LIBMP_LT_CURRENT):$(LIBMP_LT_REVISION):$(LIBMP_LT_AGE) - - -info_TEXINFOS = gmp.texi - - -# Don't ship CVS directories or emacs backups. -dist-hook: - -find $(distdir) \( -name CVS -type d \) -o -name "*.~*" \ - | xargs rm -rf diff --git a/rts/gmp/Makefile.in b/rts/gmp/Makefile.in deleted file mode 100644 index e63383e..0000000 --- a/rts/gmp/Makefile.in +++ /dev/null @@ -1,932 +0,0 @@ -# Makefile.in generated automatically by automake 1.4a from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 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. - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = . - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_FLAG = -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : - -@SET_MAKE@ -build_alias = @build_alias@ -build_triplet = @build@ -host_alias = @host_alias@ -host_triplet = @host@ -target_alias = @target_alias@ -target_triplet = @target@ -AMDEP = @AMDEP@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CPP = @CPP@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -EXEEXT = @EXEEXT@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -SPEED_CYCLECOUNTER_OBJS = @SPEED_CYCLECOUNTER_OBJS@ -STRIP = @STRIP@ -U = @U@ -VERSION = @VERSION@ -gmp_srclinks = @gmp_srclinks@ -install_sh = @install_sh@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ - -# Copyright (C) 1991, 1993, 1994, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -# make check -# -# It'd be good if "make check" first did a "make all" or whatever to -# build libgmp.la, but it's not clear how best to do this. Putting a -# "check:" target is overridden by automake, and a "check-local:" runs -# too late (due to depth-first subdirectory processing). For now it's -# necessary to do "make && make check". -# -# MPF_OBJECTS etc -# -# Libtool needs all the .lo files passed to it if it's going to build -# both a static and shared library. If a convenience library like -# mpf/libmpf.la is passed then the resulting libgmp.a gets the PIC .lo -# objects rather than the non-PIC .o's. -# -# Unfortunately this leads to the big lists of objects below. 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. - -# Libtool -version-info for libgmp.la and libmp.la. See (libtool)Versioning -# -# 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 and libmp, only do it just before a release. -# -# GMP -version-info -# release libgmp 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 -# -# -# Starting at 3:0:0 is a slight abuse of the versioning system, but it -# ensures we're past soname libgmp.so.2, which is what has been 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. - - -LIBGMP_LT_CURRENT = 4 -LIBGMP_LT_REVISION = 1 -LIBGMP_LT_AGE = 1 - -LIBMP_LT_CURRENT = 4 -LIBMP_LT_REVISION = 1 -LIBMP_LT_AGE = 1 - -AUTOMAKE_OPTIONS = gnu check-news no-dependencies ansi2knr - -SUBDIRS = mpn mpz - -include_HEADERS = gmp.h $(MPBSD_HEADERS_OPTION) $(MPFR_HEADERS_OPTION) -EXTRA_HEADERS = mp.h - -lib_LTLIBRARIES = libgmp.la $(MPBSD_LTLIBRARIES_OPTION) - -EXTRA_DIST = .gdbinit gmp-impl.h longlong.h stack-alloc.h urandom.h doc macos - -DISTCLEANFILES = asm-syntax.h config.m4 @gmp_srclinks@ - -MPZ_OBJECTS = mpz/abs.lo mpz/add.lo mpz/add_ui.lo mpz/addmul_ui.lo mpz/and.lo \ - mpz/array_init.lo mpz/bin_ui.lo mpz/bin_uiui.lo mpz/cdiv_q.lo \ - mpz/cdiv_q_ui.lo mpz/cdiv_qr.lo mpz/cdiv_qr_ui.lo mpz/cdiv_r.lo \ - mpz/cdiv_r_ui.lo mpz/cdiv_ui.lo mpz/clear.lo mpz/clrbit.lo mpz/cmp.lo \ - mpz/cmp_si.lo mpz/cmp_ui.lo mpz/cmpabs.lo mpz/cmpabs_ui.lo mpz/com.lo \ - mpz/divexact.lo mpz/dump.lo mpz/fac_ui.lo mpz/fdiv_q.lo mpz/fdiv_q_2exp.lo \ - mpz/fdiv_q_ui.lo mpz/fdiv_qr.lo mpz/fdiv_qr_ui.lo mpz/fdiv_r.lo \ - mpz/fdiv_r_2exp.lo mpz/fdiv_r_ui.lo mpz/fdiv_ui.lo mpz/fib_ui.lo \ - mpz/fits_sint_p.lo mpz/fits_slong_p.lo mpz/fits_sshort_p.lo \ - mpz/fits_uint_p.lo mpz/fits_ulong_p.lo mpz/fits_ushort_p.lo mpz/gcd.lo \ - mpz/gcd_ui.lo mpz/gcdext.lo mpz/get_d.lo mpz/get_si.lo mpz/get_str.lo \ - mpz/get_ui.lo mpz/getlimbn.lo mpz/hamdist.lo mpz/init.lo mpz/inp_raw.lo \ - mpz/inp_str.lo mpz/invert.lo mpz/ior.lo mpz/iset.lo mpz/iset_d.lo \ - mpz/iset_si.lo mpz/iset_str.lo mpz/iset_ui.lo mpz/jacobi.lo \ - mpz/kronsz.lo mpz/kronuz.lo mpz/kronzs.lo mpz/kronzu.lo \ - mpz/lcm.lo mpz/legendre.lo \ - mpz/mod.lo mpz/mul.lo mpz/mul_2exp.lo mpz/mul_si.lo mpz/mul_ui.lo \ - mpz/neg.lo mpz/nextprime.lo mpz/out_raw.lo mpz/out_str.lo mpz/perfpow.lo mpz/perfsqr.lo \ - mpz/popcount.lo mpz/pow_ui.lo mpz/powm.lo mpz/powm_ui.lo mpz/pprime_p.lo \ - mpz/random.lo mpz/random2.lo mpz/realloc.lo mpz/remove.lo mpz/root.lo \ - mpz/rrandomb.lo \ - mpz/scan0.lo mpz/scan1.lo mpz/set.lo mpz/set_d.lo mpz/set_f.lo mpz/set_q.lo \ - mpz/set_si.lo mpz/set_str.lo mpz/set_ui.lo mpz/setbit.lo mpz/size.lo \ - mpz/sizeinbase.lo mpz/sqrt.lo mpz/sqrtrem.lo mpz/sub.lo mpz/sub_ui.lo \ - mpz/swap.lo mpz/tdiv_ui.lo mpz/tdiv_q.lo mpz/tdiv_q_2exp.lo mpz/tdiv_q_ui.lo \ - mpz/tdiv_qr.lo mpz/tdiv_qr_ui.lo mpz/tdiv_r.lo mpz/tdiv_r_2exp.lo \ - mpz/tdiv_r_ui.lo mpz/tstbit.lo mpz/ui_pow_ui.lo mpz/urandomb.lo \ - mpz/urandomm.lo mpz/xor.lo - -MPN_OBJECTS = @mpn_objs_in_libgmp@ - -MPBSD_OBJECTS = mpbsd/add.lo mpbsd/tdiv_qr.lo mpbsd/move.lo mpbsd/powm.lo \ - mpbsd/sub.lo mpbsd/cmp.lo mpbsd/mfree.lo mpbsd/mtox.lo mpbsd/realloc.lo \ - mpbsd/gcd.lo mpbsd/itom.lo mpbsd/min.lo mpbsd/mul.lo mpbsd/mout.lo \ - mpbsd/pow_ui.lo mpbsd/sdiv.lo mpbsd/sqrtrem.lo mpbsd/xtom.lo - - - -@WANT_MPFR_TRUE@MPFR_HEADERS_OPTION = @WANT_MPFR_TRUE@mpfr/mpfr.h -@WANT_MPFR_TRUE@MPFR_OBJECTS_OPTION = @WANT_MPFR_TRUE@$(MPFR_OBJECTS) -@WANT_MPFR_TRUE@MPFR_LIBADD_OPTION = @WANT_MPFR_TRUE@-lm -libgmp_la_SOURCES = assert.c compat.c errno.c memory.c mp_set_fns.c \ - mp_clz_tab.c mp_minv_tab.c \ - version.c stack-alloc.c mp_bpl.c extract-dbl.c insert-dbl.c - -libgmp_la_DEPENDENCIES = \ - $(MPF_OBJECTS) $(MPZ_OBJECTS) $(MPN_OBJECTS) $(MPQ_OBJECTS) \ - $(MPFR_OBJECTS_OPTION) - -libgmp_la_LIBADD = $(libgmp_la_DEPENDENCIES) $(MPFR_LIBADD_OPTION) -libgmp_la_LDFLAGS = \ - -version-info $(LIBGMP_LT_CURRENT):$(LIBGMP_LT_REVISION):$(LIBGMP_LT_AGE) - - -@WANT_MPBSD_TRUE@MPBSD_HEADERS_OPTION = @WANT_MPBSD_TRUE@mp.h -@WANT_MPBSD_TRUE@MPBSD_LTLIBRARIES_OPTION = @WANT_MPBSD_TRUE@libmp.la -libmp_la_SOURCES = assert.c errno.c memory.c mp_bpl.c mp_clz_tab.c \ - mp_minv_tab.c mp_set_fns.c stack-alloc.c - -libmp_la_DEPENDENCIES = $(MPBSD_OBJECTS) $(MPN_OBJECTS) \ - mpz/add.lo mpz/clear.lo mpz/cmp.lo mpz/init.lo mpz/mod.lo mpz/mul.lo \ - mpz/mul_2exp.lo mpz/realloc.lo mpz/set.lo mpz/set_ui.lo mpz/tdiv_r.lo \ - mpz/sub.lo - -libmp_la_LIBADD = $(libmp_la_DEPENDENCIES) -libmp_la_LDFLAGS = \ - -version-info $(LIBMP_LT_CURRENT):$(LIBMP_LT_REVISION):$(LIBMP_LT_AGE) - - -info_TEXINFOS = gmp.texi -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(lib_LTLIBRARIES) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I. -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -ANSI2KNR = @ANSI2KNR@ -am_libgmp_la_OBJECTS = assert$U.lo compat$U.lo errno$U.lo memory$U.lo \ -mp_set_fns$U.lo mp_clz_tab$U.lo mp_minv_tab$U.lo rand$U.lo randclr$U.lo \ -randlc$U.lo randlc2x$U.lo randraw$U.lo randsd$U.lo randsdui$U.lo \ -version$U.lo stack-alloc$U.lo mp_bpl$U.lo extract-dbl$U.lo \ -insert-dbl$U.lo -libgmp_la_OBJECTS = $(am_libgmp_la_OBJECTS) -am_libmp_la_OBJECTS = assert$U.lo errno$U.lo memory$U.lo mp_bpl$U.lo \ -mp_clz_tab$U.lo mp_minv_tab$U.lo mp_set_fns$U.lo stack-alloc$U.lo -libmp_la_OBJECTS = $(am_libmp_la_OBJECTS) -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CFLAGS = @CFLAGS@ -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(libgmp_la_SOURCES) $(libmp_la_SOURCES) -TEXI2DVI = texi2dvi -# INFO_DEPS = gmp.info -DVIS = gmp.dvi -TEXINFOS = gmp.texi -HEADERS = $(include_HEADERS) - -DIST_COMMON = README $(EXTRA_HEADERS) $(include_HEADERS) ./stamp-h.in \ -AUTHORS COPYING COPYING.LIB ChangeLog INSTALL Makefile.am Makefile.in \ -NEWS acconfig.h acinclude.m4 aclocal.m4 ansi2knr.1 ansi2knr.c \ -config.guess config.in config.sub configure configure.in depcomp \ -install-sh ltconfig ltmain.sh mdate-sh missing mkinstalldirs stamp-vti \ -texinfo.tex version.texi - - -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -GZIP_ENV = --best -depcomp = -SOURCES = $(libgmp_la_SOURCES) $(libmp_la_SOURCES) -OBJECTS = $(am_libgmp_la_OBJECTS) $(am_libmp_la_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .c .dvi .info .lo .o .obj .ps .texi .texinfo .txi -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status - -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 - cd $(srcdir) && $(ACLOCAL) - -config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck -$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) - cd $(srcdir) && $(AUTOCONF) - -config.h: stamp-h - @if test ! -f $@; then \ - rm -f stamp-h; \ - $(MAKE) stamp-h; \ - else :; fi -stamp-h: $(srcdir)/config.in $(top_builddir)/config.status - @rm -f stamp-h stamp-hT - @echo timestamp > stamp-hT 2> /dev/null - cd $(top_builddir) \ - && CONFIG_FILES= CONFIG_HEADERS=config.h:config.in \ - $(SHELL) ./config.status - @mv stamp-hT stamp-h -$(srcdir)/config.in: @MAINTAINER_MODE_TRUE@$(srcdir)/./stamp-h.in - @if test ! -f $@; then \ - rm -f $(srcdir)/./stamp-h.in; \ - $(MAKE) $(srcdir)/./stamp-h.in; \ - else :; fi -$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h - @rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT - @echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null - cd $(top_srcdir) && $(AUTOHEADER) - @mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in - -mostlyclean-hdr: - -clean-hdr: - -distclean-hdr: - -rm -f config.h - -maintainer-clean-hdr: - -mostlyclean-libLTLIBRARIES: - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - -distclean-libLTLIBRARIES: - -maintainer-clean-libLTLIBRARIES: - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(libdir) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - echo " $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$p"; \ - $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$p; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \ - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ - done - -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -mostlyclean-krextra: - -clean-krextra: - -rm -f ansi2knr - -distclean-krextra: - -maintainer-clean-krextra: -ansi2knr: ansi2knr.$(OBJEXT) - $(LINK) ansi2knr.$(OBJEXT) $(LIBS) -ansi2knr.$(OBJEXT): $(CONFIG_HEADER) - - -mostlyclean-kr: - -rm -f *_.c - -clean-kr: - -distclean-kr: - -maintainer-clean-kr: - -gmp.dll: libgmp.a - dllwrap -mno-cygwin --target=i386-unknown-mingw32 \ - --export-all --dllname gmp.dll --output-lib=libgmp_imp.a \ - -o gmp.dll libgmp.a - -libgmp.la: $(libgmp_la_OBJECTS) $(libgmp_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libgmp_la_LDFLAGS) $(libgmp_la_OBJECTS) $(libgmp_la_LIBADD) $(LIBS) - -libmp.la: $(libmp_la_OBJECTS) $(libmp_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(libmp_la_LDFLAGS) $(libmp_la_OBJECTS) $(libmp_la_LIBADD) $(LIBS) -.c.o: - $(COMPILE) -c $< -.c.obj: - $(COMPILE) -c `cygpath -w $<` -.c.lo: - $(LTCOMPILE) -c -o $@ $< -assert_.c: assert.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/assert.c; then echo $(srcdir)/assert.c; else echo assert.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > assert_.c -compat_.c: compat.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/compat.c; then echo $(srcdir)/compat.c; else echo compat.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > compat_.c -errno_.c: errno.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/errno.c; then echo $(srcdir)/errno.c; else echo errno.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > errno_.c -extract-dbl_.c: extract-dbl.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/extract-dbl.c; then echo $(srcdir)/extract-dbl.c; else echo extract-dbl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > extract-dbl_.c -insert-dbl_.c: insert-dbl.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/insert-dbl.c; then echo $(srcdir)/insert-dbl.c; else echo insert-dbl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > insert-dbl_.c -memory_.c: memory.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memory.c; then echo $(srcdir)/memory.c; else echo memory.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memory_.c -mp_bpl_.c: mp_bpl.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mp_bpl.c; then echo $(srcdir)/mp_bpl.c; else echo mp_bpl.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mp_bpl_.c -mp_clz_tab_.c: mp_clz_tab.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mp_clz_tab.c; then echo $(srcdir)/mp_clz_tab.c; else echo mp_clz_tab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mp_clz_tab_.c -mp_minv_tab_.c: mp_minv_tab.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mp_minv_tab.c; then echo $(srcdir)/mp_minv_tab.c; else echo mp_minv_tab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mp_minv_tab_.c -mp_set_fns_.c: mp_set_fns.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mp_set_fns.c; then echo $(srcdir)/mp_set_fns.c; else echo mp_set_fns.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mp_set_fns_.c -rand_.c: rand.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rand.c; then echo $(srcdir)/rand.c; else echo rand.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rand_.c -randclr_.c: randclr.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randclr.c; then echo $(srcdir)/randclr.c; else echo randclr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randclr_.c -randlc_.c: randlc.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randlc.c; then echo $(srcdir)/randlc.c; else echo randlc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randlc_.c -randlc2x_.c: randlc2x.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randlc2x.c; then echo $(srcdir)/randlc2x.c; else echo randlc2x.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randlc2x_.c -randraw_.c: randraw.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randraw.c; then echo $(srcdir)/randraw.c; else echo randraw.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randraw_.c -randsd_.c: randsd.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randsd.c; then echo $(srcdir)/randsd.c; else echo randsd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randsd_.c -randsdui_.c: randsdui.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/randsdui.c; then echo $(srcdir)/randsdui.c; else echo randsdui.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > randsdui_.c -stack-alloc_.c: stack-alloc.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stack-alloc.c; then echo $(srcdir)/stack-alloc.c; else echo stack-alloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stack-alloc_.c -version_.c: version.c $(ANSI2KNR) - $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/version.c; then echo $(srcdir)/version.c; else echo version.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > version_.c -assert_.$(OBJEXT) assert_.lo compat_.$(OBJEXT) compat_.lo \ -errno_.$(OBJEXT) errno_.lo extract-dbl_.$(OBJEXT) extract-dbl_.lo \ -insert-dbl_.$(OBJEXT) insert-dbl_.lo memory_.$(OBJEXT) memory_.lo \ -mp_bpl_.$(OBJEXT) mp_bpl_.lo mp_clz_tab_.$(OBJEXT) mp_clz_tab_.lo \ -mp_minv_tab_.$(OBJEXT) mp_minv_tab_.lo mp_set_fns_.$(OBJEXT) \ -mp_set_fns_.lo rand_.$(OBJEXT) rand_.lo randclr_.$(OBJEXT) randclr_.lo \ -randlc_.$(OBJEXT) randlc_.lo randlc2x_.$(OBJEXT) randlc2x_.lo \ -randraw_.$(OBJEXT) randraw_.lo randsd_.$(OBJEXT) randsd_.lo \ -randsdui_.$(OBJEXT) randsdui_.lo stack-alloc_.$(OBJEXT) stack-alloc_.lo \ -version_.$(OBJEXT) version_.lo : $(ANSI2KNR) - -$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@stamp-vti - @: - -$(srcdir)/stamp-vti: gmp.texi $(top_srcdir)/configure.in - @echo "@set UPDATED `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/gmp.texi`" > vti.tmp - @echo "@set EDITION $(VERSION)" >> vti.tmp - @echo "@set VERSION $(VERSION)" >> vti.tmp - @cmp -s vti.tmp $(srcdir)/version.texi \ - || (echo "Updating $(srcdir)/version.texi"; \ - cp vti.tmp $(srcdir)/version.texi) - -@rm -f vti.tmp - @cp $(srcdir)/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp - -clean-vti: - -distclean-vti: - -maintainer-clean-vti: - -@MAINTAINER_MODE_TRUE@rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi - -# gmp.info: gmp.texi version.texi -# gmp.dvi: gmp.texi version.texi - - -DVIPS = dvips - -.texi.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texi.dvi: - TEXINPUTS=$(srcdir):$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.texi: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.texinfo.dvi: - TEXINPUTS=$(srcdir):$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi.info: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` - -.txi.dvi: - TEXINPUTS=$(srcdir):$$TEXINPUTS \ - MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< - -.txi: - @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] - cd $(srcdir) \ - && $(MAKEINFO) `echo $< | sed 's,.*/,,'` -.dvi.ps: - $(DVIPS) $< -o $@ - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(infodir) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - d=$(srcdir); \ - for ifile in `CDPATH=: && cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ - if test -f $$d/$$ifile; then \ - echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ - $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ - install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ - done; \ - else : ; fi - -uninstall-info: - $(PRE_UNINSTALL) - @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \ - install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - (if cd $(DESTDIR)$(infodir); then \ - echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \ - rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \ - else :; fi); \ - done - -dist-info: $(INFO_DEPS) - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - d=$(srcdir); \ - for file in `CDPATH=: && cd $$d && eval echo $$base*`; do \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file; \ - done; \ - done - -mostlyclean-aminfo: - -rm -f gmp.aux gmp.cp gmp.cps gmp.dvi gmp.fn gmp.fns gmp.pgs gmp.ky \ - gmp.kys gmp.ps gmp.log gmp.pg gmp.toc gmp.tp gmp.tps gmp.vr \ - gmp.vrs gmp.op gmp.tr gmp.cv gmp.cn gmp.cm gmp.ov - -clean-aminfo: - -distclean-aminfo: - -maintainer-clean-aminfo: - cd $(srcdir) && for i in $(INFO_DEPS); do \ - rm -f $$i; \ - if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ - rm -f $$i-[0-9]*; \ - fi; \ - done - -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(includedir) - @list='$(include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$f"; \ - $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$f; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(include_HEADERS)'; for p in $$list; do \ - f="`echo $$p | sed -e 's|^.*/||'`"; \ - echo " rm -f $(DESTDIR)$(includedir)/$$f"; \ - rm -f $(DESTDIR)$(includedir)/$$f; \ - done - -# 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. - -all-recursive install-data-recursive install-exec-recursive \ -installdirs-recursive install-recursive uninstall-recursive \ -check-recursive installcheck-recursive info-recursive dvi-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; 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; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ - rev="$$subdir $$rev"; \ - if test "$$subdir" = "."; then dot_seen=yes; else :; fi; \ - done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -f$$here/ID $$unique $(LISP) - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)config.in$$unique$(LISP)$$tags" \ - || etags $(ETAGS_ARGS) $$tags config.in $$unique $(LISP) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(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 - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/=build - mkdir $(distdir)/=inst - chmod a-w $(distdir) - dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \ - && cd $(distdir)/=build \ - && ../configure --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 \ - && test `find $$dc_install_base -type f -print | wc -l` -le 1 \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && $(MAKE) $(AM_MAKEFLAGS) distclean \ - && rm -f $(distdir).tar.gz \ - && test `find . -type f -print | wc -l` -eq 0 - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) - @banner="$(distdir).tar.gz is ready for distribution"; \ - dashes=`echo "$$banner" | sed s/./=/g`; \ - echo "$$dashes"; \ - echo "$$banner"; \ - echo "$$dashes" -dist: distdir - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) -dist-all: distdir - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) - $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) -distdir: $(DISTFILES) - @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" > /dev/null; then :; else \ - echo "NEWS not updated; not releasing" 1>&2; \ - exit 1; \ - fi - -chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir) - mkdir $(distdir) - $(mkinstalldirs) $(distdir)/mpfr - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pR $$d/$$file $(distdir); \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - for subdir in $(SUBDIRS); do \ - if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook -info-am: $(INFO_DEPS) -info: info-recursive -dvi-am: $(DVIS) -dvi: dvi-recursive -check-am: all-am -check: check-recursive -installcheck-am: -installcheck: installcheck-recursive -all-recursive-am: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -install-exec-am: install-libLTLIBRARIES -install-exec: install-exec-recursive - -install-data-am: install-info-am install-includeHEADERS -install-data: install-data-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-recursive -uninstall-am: uninstall-libLTLIBRARIES uninstall-info \ - uninstall-includeHEADERS -uninstall: uninstall-recursive -all-am: Makefile $(INFO_DEPS) $(ANSI2KNR) $(LTLIBRARIES) $(HEADERS) \ - config.h -all-redirect: all-recursive-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install -installdirs: installdirs-recursive -installdirs-am: - $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(infodir) \ - $(DESTDIR)$(includedir) - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - -rm -f Makefile.in -mostlyclean-am: mostlyclean-hdr mostlyclean-libLTLIBRARIES \ - mostlyclean-compile mostlyclean-libtool \ - mostlyclean-krextra mostlyclean-kr mostlyclean-vti \ - mostlyclean-aminfo mostlyclean-tags mostlyclean-generic - -mostlyclean: mostlyclean-recursive - -clean-am: clean-hdr clean-libLTLIBRARIES clean-compile clean-libtool \ - clean-krextra clean-kr clean-vti clean-aminfo \ - clean-tags clean-generic mostlyclean-am - -clean: clean-recursive - -distclean-am: distclean-hdr distclean-libLTLIBRARIES distclean-compile \ - distclean-libtool distclean-krextra distclean-kr \ - distclean-vti distclean-aminfo distclean-tags \ - distclean-generic clean-am - -rm -f libtool - -distclean: distclean-recursive - -rm -f config.status - -maintainer-clean-am: maintainer-clean-hdr \ - maintainer-clean-libLTLIBRARIES \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-krextra maintainer-clean-kr \ - maintainer-clean-vti maintainer-clean-aminfo \ - maintainer-clean-tags maintainer-clean-generic \ - distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-recursive - -rm -f config.status - -.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ -mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ -clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ -uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ -distclean-compile clean-compile maintainer-clean-compile \ -mostlyclean-libtool distclean-libtool clean-libtool \ -maintainer-clean-libtool mostlyclean-krextra distclean-krextra \ -clean-krextra maintainer-clean-krextra mostlyclean-kr distclean-kr \ -clean-kr maintainer-clean-kr mostlyclean-vti distclean-vti clean-vti \ -maintainer-clean-vti install-info-am uninstall-info mostlyclean-aminfo \ -distclean-aminfo clean-aminfo maintainer-clean-aminfo \ -uninstall-includeHEADERS install-includeHEADERS install-recursive \ -uninstall-recursive install-data-recursive uninstall-data-recursive \ -install-exec-recursive uninstall-exec-recursive installdirs-recursive \ -uninstalldirs-recursive all-recursive check-recursive \ -installcheck-recursive info-recursive dvi-recursive \ -mostlyclean-recursive distclean-recursive clean-recursive \ -maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ -install-exec-am install-exec install-data-am install-data install-am \ -install uninstall-am uninstall all-redirect all-am all install-strip \ -installdirs-am installdirs mostlyclean-generic distclean-generic \ -clean-generic maintainer-clean-generic clean mostlyclean distclean \ -maintainer-clean - - -# Don't ship CVS directories or emacs backups. -dist-hook: - -find $(distdir) \( -name CVS -type d \) -o -name "*.~*" \ - | xargs rm -rf - -# 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/rts/gmp/NEWS b/rts/gmp/NEWS deleted file mode 100644 index 3b549d5..0000000 --- a/rts/gmp/NEWS +++ /dev/null @@ -1,136 +0,0 @@ -Changes between MP version 3.1 and 3.1.1 - -* Bug fixes for division (rare), mpf_get_str, FFT, and miscellaneous minor - things. - -Changes between MP 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 improvments: Alpha 21264. -* Some speed improvments: 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 MP 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 MP 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 MP version 2.0 and 2.0.2 - -* Many bug fixes. - -Changes between MP 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. - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/rts/gmp/README b/rts/gmp/README deleted file mode 100644 index 177c97e..0000000 --- a/rts/gmp/README +++ /dev/null @@ -1,84 +0,0 @@ - - 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.LIB and COPYING (most of GNU MP is under the former, some under -the latter). - - - - OVERVIEW OF GNU MP - -There are five 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. - - 5. Berkeley MP compatible functions. - - To use these functions, include the file "mp.h". You can test if you are - using the GNU version by testing if the symbol __GNU_MP__ is defined. - -For more information on how to use GNU MP, please refer to the documentation. -It is composed from the file 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 http://www.swox.com/gmp/, -under "Status of the current release". There will be patches for all known -serious bugs there. - -Report bugs to bug-gmp@gnu.org. What information is needed in a good 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/rts/gmp/acconfig.h b/rts/gmp/acconfig.h deleted file mode 100644 index dfb1b0b..0000000 --- a/rts/gmp/acconfig.h +++ /dev/null @@ -1,92 +0,0 @@ -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -@TOP@ - -/* Define if a limb is long long. */ -#undef _LONG_LONG_LIMB - -/* Define if we have native implementation of function. */ -#undef HAVE_NATIVE_ -#undef HAVE_NATIVE_mpn_add -#undef HAVE_NATIVE_mpn_add_1 -#undef HAVE_NATIVE_mpn_add_n -#undef HAVE_NATIVE_mpn_add_nc -#undef HAVE_NATIVE_mpn_addmul_1 -#undef HAVE_NATIVE_mpn_addmul_1c -#undef HAVE_NATIVE_mpn_addsub_n -#undef HAVE_NATIVE_mpn_addsub_nc -#undef HAVE_NATIVE_mpn_and_n -#undef HAVE_NATIVE_mpn_andn_n -#undef HAVE_NATIVE_mpn_bdivmod -#undef HAVE_NATIVE_mpn_cmp -#undef HAVE_NATIVE_mpn_com_n -#undef HAVE_NATIVE_mpn_copyd -#undef HAVE_NATIVE_mpn_copyi -#undef HAVE_NATIVE_mpn_divexact_by3c -#undef HAVE_NATIVE_mpn_divrem -#undef HAVE_NATIVE_mpn_divrem_1 -#undef HAVE_NATIVE_mpn_divrem_1c -#undef HAVE_NATIVE_mpn_divrem_2 -#undef HAVE_NATIVE_mpn_divrem_newton -#undef HAVE_NATIVE_mpn_divrem_classic -#undef HAVE_NATIVE_mpn_dump -#undef HAVE_NATIVE_mpn_gcd -#undef HAVE_NATIVE_mpn_gcd_1 -#undef HAVE_NATIVE_mpn_gcdext -#undef HAVE_NATIVE_mpn_get_str -#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_mod_1 -#undef HAVE_NATIVE_mpn_mod_1c -#undef HAVE_NATIVE_mpn_mul -#undef HAVE_NATIVE_mpn_mul_1 -#undef HAVE_NATIVE_mpn_mul_1c -#undef HAVE_NATIVE_mpn_mul_basecase -#undef HAVE_NATIVE_mpn_mul_n -#undef HAVE_NATIVE_mpn_nand_n -#undef HAVE_NATIVE_mpn_nior_n -#undef HAVE_NATIVE_mpn_perfect_square_p -#undef HAVE_NATIVE_mpn_popcount -#undef HAVE_NATIVE_mpn_preinv_mod_1 -#undef HAVE_NATIVE_mpn_random2 -#undef HAVE_NATIVE_mpn_random -#undef HAVE_NATIVE_mpn_rawrandom -#undef HAVE_NATIVE_mpn_rshift -#undef HAVE_NATIVE_mpn_scan0 -#undef HAVE_NATIVE_mpn_scan1 -#undef HAVE_NATIVE_mpn_set_str -#undef HAVE_NATIVE_mpn_sqrtrem -#undef HAVE_NATIVE_mpn_sqr_basecase -#undef HAVE_NATIVE_mpn_sub -#undef HAVE_NATIVE_mpn_sub_1 -#undef HAVE_NATIVE_mpn_sub_n -#undef HAVE_NATIVE_mpn_sub_nc -#undef HAVE_NATIVE_mpn_submul_1 -#undef HAVE_NATIVE_mpn_submul_1c -#undef HAVE_NATIVE_mpn_udiv_w_sdiv -#undef HAVE_NATIVE_mpn_umul_ppmm -#undef HAVE_NATIVE_mpn_udiv_qrnnd -#undef HAVE_NATIVE_mpn_xor_n -#undef HAVE_NATIVE_mpn_xnor_n diff --git a/rts/gmp/acinclude.m4 b/rts/gmp/acinclude.m4 deleted file mode 100644 index a02394a..0000000 --- a/rts/gmp/acinclude.m4 +++ /dev/null @@ -1,835 +0,0 @@ -dnl GMP specific autoconf macros - - -dnl Copyright (C) 2000 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 the GNU Lesser General Public License as published -dnl by the Free Software Foundation; either version 2.1 of the License, or (at -dnl your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will 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 -dnl You should have received a copy of the GNU Lesser General Public License -dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl GMP_HEADER_GETVAL(NAME,FILE) -dnl ---------------------------- -dnl Expand to the value of a "#define NAME" from the given FILE. -dnl 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. -dnl Two digits like 3.0 if patchlevel <= 0, or three digits like 3.0.1 if -dnl patchlevel > 0. - -define(GMP_VERSION, -[GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp.h)[]dnl -.GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp.h)[]dnl -ifelse(m4_eval(GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h) > 0),1, -[.GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h)])]) - - -dnl GMP_PROG_M4() -dnl ------------- -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 it tests each m4 found to see if -dnl it's good enough. -dnl -dnl See mpn/asm-defs.m4 for details on the known bad m4s. - -AC_DEFUN(GMP_PROG_M4, -[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! -[define(dollarhash,``$][#'')dnl -ifelse(dollarhash(x),1,`define(t1,Y)', -``bad: $][# not supported (SunOS /usr/bin/m4) -'')dnl -ifelse(eval(89),89,`define(t2,Y)', -`bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4) -')dnl -ifelse(t1`'t2,YY,`good -')dnl] -EOF - echo "trying m4" 1>&AC_FD_CC - gmp_tmp_val="`(m4 conftest.m4) 2>&AC_FD_CC`" - echo "$gmp_tmp_val" 1>&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" 1>&AC_FD_CC - gmp_tmp_val="`($ac_dir/m4 conftest.m4) 2>&AC_FD_CC`" - echo "$gmp_tmp_val" 1>&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_PROG_CC_FIND([CC_LIST], [REQ_64BIT_CC]) -dnl Find first working compiler in CC_LIST. -dnl If REQ_64BIT_CC is "yes", the compiler is required to be able to -dnl produce 64-bit code. -dnl NOTE: If a compiler needs any special flags for producing 64-bit code, -dnl these have to be found in shell variable `gmp_cflags64_{cc}', where `{cc}' -dnl is the name of the compiler. -dnl Set CC to the name of the first working compiler. -dnl If a 64-bit compiler is found, set CC64 to the name of the compiler and -dnl CFLAGS64 to flags to use. -dnl This macro does not test if any of the compilers found is a GNU compiler. -dnl To do this, when you have finally made up your mind on which one to use, -dnl and set CC accordingly, invoke [GMP_PROG_CC_SELECT]. That macro will -dnl also make sure that your selection of CFLAGS is valid. -dnl -AC_DEFUN(GMP_PROG_CC_FIND, -[AC_BEFORE([$0], [CC_PROG_CPP]) -ifelse([$1], , gmp_cc_list="gcc cc", gmp_cc_list="[$1]") -ifelse([$2], , gmp_req_64bit_cc="no", gmp_req_64bit_cc="[$2]") - -CC32= -CC64= -for c in $gmp_cc_list; do - # Avoid cache hits. - unset CC - unset ac_cv_prog_CC - AC_CHECK_TOOL(CC, $c, $c) - if test -n "$CC"; then - eval c_flags=\$gmp_cflags_$c - GMP_PROG_CC_WORKS($CC, $c_flags, - gmp_prog_cc_works=yes, - gmp_prog_cc_works=no) - - if test "$gmp_prog_cc_works" != "yes"; then - continue - fi - - # Save first working compiler, whether 32- or 64-bit capable. - if test -z "$CC32"; then - CC32="$CC" - fi - if test "$gmp_req_64bit_cc" = "yes"; then - eval c_flags=\$gmp_cflags64_$c - - # Verify that the compiler works in 64-bit mode as well. - # /usr/ucb/cc on Solaris 7 can *compile* in 64-bit mode, but not link. - GMP_PROG_CC_WORKS($c, $c_flags, - gmp_prog_cc_works=yes, - gmp_prog_cc_works=no) - - if test "$gmp_prog_cc_works" = "yes"; then - GMP_CHECK_CC_64BIT($c, $c_flags) - if test "$gmp_cv_cc_64bit" = "yes"; then - test -z "$CC64" && CC64="$c" - test -z "$CFLAGS64" && CFLAGS64="$c_flags" - # We have CC64 so we're done. - break - fi - fi - else - # We have CC32, and we don't need a 64-bit compiler so we're done. - break - fi - fi -done -CC="$CC32" -])dnl - -dnl GMP_PROG_CC_SELECT -dnl Check that `CC' works with `CFLAGS'. Check if `CC' is a GNU compiler. -dnl Cache the result as `ac_cv_prog_CC'. -AC_DEFUN(GMP_PROG_CC_SELECT, -[AC_BEFORE([$0], [CC_PROG_CPP]) -AC_PROG_CC_WORKS -AC_PROG_CC_GNU - -if test "$ac_cv_prog_gcc" = "yes"; then - GCC=yes -else - GCC= -fi - -# Set CFLAGS if not already set. -if test -z "$CFLAGS"; then - CFLAGS="-g" - if test "$GCC" = "yes"; then - CFLAGS="$CFLAGS -O2" - fi -fi - -AC_SUBST(CC) -AC_CACHE_VAL(ac_cv_prog_CC, ac_cv_prog_CC="$CC") -AC_PROVIDE([AC_PROG_CC]) -])dnl - -dnl GMP_CHECK_CC_64BIT(cc, cflags64) -dnl Find out if `CC' can produce 64-bit code. -dnl Requires NM to be set to nm for target. -dnl FIXME: Cache result. -AC_DEFUN(GMP_CHECK_CC_64BIT, -[ - gmp_tmp_CC_save="$CC" - CC="[$1]" - AC_MSG_CHECKING([whether the C compiler ($CC) is 64-bit capable]) - if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 - fi - gmp_tmp_CFLAGS_save="$CFLAGS" - CFLAGS="[$2]" - - case "$target" in - hppa2.0*-*-*) - # FIXME: If gcc is installed under another name than "gcc", we will - # test the wrong thing. - if test "$CC" != "gcc"; then - dnl Let compiler version A.10.32.30 or higher be ok. - dnl Bad compiler output: - dnl ccom: HP92453-01 G.10.32.05 HP C Compiler - dnl Good compiler output: - dnl ccom: HP92453-01 A.10.32.30 HP C Compiler - echo >conftest.c - gmp_tmp_vs=`$CC $CFLAGS -V -c -o conftest.o conftest.c 2>&1 | grep "^ccom:"` - rm conftest* - gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\(.*\)\..*\..* HP C.*/\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/'` - gmp_cv_cc_64bit=no - test -n "$gmp_tmp_v1" && test "$gmp_tmp_v1" -ge "10" \ - && test -n "$gmp_tmp_v2" && test "$gmp_tmp_v2" -ge "32" \ - && test -n "$gmp_tmp_v3" && test "$gmp_tmp_v3" -ge "30" \ - && gmp_cv_cc_64bit=yes - else # gcc - # FIXME: Compile a minimal file and determine if the resulting object - # file is an ELF file. If so, gcc can produce 64-bit code. - # Do we have file(1) for target? - gmp_cv_cc_64bit=no - fi - ;; - mips-sgi-irix6.*) - # We use `-n32' to cc and `-mabi=n32' to gcc, resulting in 64-bit - # arithmetic but not 64-bit pointers, so the general test for sizeof - # (void *) is not valid. - # Simply try to compile an empty main. If that succeeds return - # true. - AC_TRY_COMPILE( , , - gmp_cv_cc_64bit=yes, gmp_cv_cc_64bit=no, - gmp_cv_cc_64bit=no) - ;; - *-*-*) - # Allocate an array of size sizeof (void *) and use nm to determine its - # size. We depend on the first declared variable being put at address 0. - cat >conftest.c <)dnl - gmp_tmp_val=`$NM conftest.o | grep post | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "8"; then - gmp_cv_cc_64bit=yes - else - gmp_cv_cc_64bit=no - fi - else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC - gmp_cv_cc_64bit=no - fi - rm -f conftest* - ;; - esac - - CC="$gmp_tmp_CC_save" - CFLAGS="$gmp_tmp_CFLAGS_save" - AC_MSG_RESULT($gmp_cv_cc_64bit) -])dnl - -dnl GMP_INIT([M4-DEF-FILE]) -dnl -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 -test -f $gmp_tmpconfigm4 && rm $gmp_tmpconfigm4 -test -f $gmp_tmpconfigm4i && rm $gmp_tmpconfigm4i -test -f $gmp_tmpconfigm4p && rm $gmp_tmpconfigm4p -])dnl - -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 ["dnl $gmp_configm4. Generated automatically by configure."] > $gmp_configm4 -if test -f $gmp_tmpconfigm4; then - echo ["changequote(<,>)dnl"] >> $gmp_configm4 - echo ["ifdef(<__CONFIG_M4_INCLUDED__>,,<"] >> $gmp_configm4 - cat $gmp_tmpconfigm4 >> $gmp_configm4 - echo [">)"] >> $gmp_configm4 - echo ["changequote(\`,')dnl"] >> $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 - -dnl GMP_INCLUDE(FILE) -AC_DEFUN(GMP_INCLUDE, -[AC_REQUIRE([GMP_INIT]) -echo ["include(\`$1')"] >> $gmp_tmpconfigm4i -])dnl - -dnl GMP_SINCLUDE(FILE) -AC_DEFUN(GMP_SINCLUDE, -[AC_REQUIRE([GMP_INIT]) -echo ["sinclude(\`$1')"] >> $gmp_tmpconfigm4i -])dnl - -dnl GMP_DEFINE(MACRO, DEFINITION [, LOCATION]) -dnl [ Define M4 macro MACRO as DEFINITION in temporary file. ] -dnl [ If LOCATION is `POST', the definition will appear after any ] -dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ] -dnl [ Mind the quoting! No shell variables will get expanded. ] -dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ] -dnl [ config.m4 uses `<' and '>' as quote characters for all defines. ] -AC_DEFUN(GMP_DEFINE, -[AC_REQUIRE([GMP_INIT]) -echo ['define(<$1>, <$2>)'] >> ifelse([$3], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -])dnl - -dnl GMP_DEFINE_RAW(STRING, [, LOCATION]) -dnl [ Put STRING in temporary file. ] -dnl [ If LOCATION is `POST', the definition will appear after any ] -dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ] -dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ] -AC_DEFUN(GMP_DEFINE_RAW, -[AC_REQUIRE([GMP_INIT]) -echo [$1] >> ifelse([$2], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -])dnl - -dnl GMP_CHECK_ASM_LABEL_SUFFIX -dnl Should a label have a colon or not? -AC_DEFUN(GMP_CHECK_ASM_LABEL_SUFFIX, -[AC_CACHE_CHECK([what assembly label suffix to use], - gmp_cv_check_asm_label_suffix, -[case "$target" in - *-*-hpux*) gmp_cv_check_asm_label_suffix=[""] ;; - *) gmp_cv_check_asm_label_suffix=[":"] ;; -esac -]) -echo ["define(, <\$][1$gmp_cv_check_asm_label_suffix>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_UNDERSCORE([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -dnl Shamelessly borrowed from glibc. -AC_DEFUN(GMP_CHECK_ASM_UNDERSCORE, -[AC_CACHE_CHECK([if symbols are prefixed by underscore], - gmp_cv_check_asm_underscore, -[cat > conftest.$ac_ext </dev/null; then - gmp_cv_check_asm_underscore=yes - else - gmp_cv_check_asm_underscore=no - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -fi -rm -f conftest* -]) -if test "$gmp_cv_check_asm_underscore" = "yes"; then - GMP_DEFINE(GSYM_PREFIX, [_]) - ifelse([$1], , :, [$1]) -else - GMP_DEFINE(GSYM_PREFIX, []) - ifelse([$2], , :, [$2]) -fi -])dnl - -dnl GMP_CHECK_ASM_ALIGN_LOG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -dnl Is parameter to `.align' logarithmic? -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_ALIGN_LOG, -[AC_REQUIRE([GMP_CHECK_ASM_GLOBL]) -AC_REQUIRE([GMP_CHECK_ASM_DATA]) -AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([if .align assembly directive is logarithmic], - gmp_cv_check_asm_align_log, -[if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 -fi -cat > conftest.s <) - gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "10" || test "$gmp_tmp_val" = "16"; then - gmp_cv_check_asm_align_log=yes - else - gmp_cv_check_asm_align_log=no - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC -fi -rm -f conftest* -]) -GMP_DEFINE_RAW(["define(,<$gmp_cv_check_asm_align_log>)"]) -if test "$gmp_cv_check_asm_align_log" = "yes"; then - ifelse([$1], , :, [$1]) -else - ifelse([$2], , :, [$2]) -fi -])dnl - - -dnl GMP_CHECK_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, where 0x90 is a "nop". -dnl -dnl Old gas, eg. 1.92.3 - needs ",0x90" or else the fill is an invalid 0x00. -dnl New gas, eg. 2.91 - generates the good multibyte nop fills even when -dnl ",0x90" is given. -dnl Solaris 2.6 as - doesn't allow ",0x90", gives a fatal error. -dnl Solaris 2.8 as - gives a warning for ",0x90", no ill effect. -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 sample. It's -dnl only the second .align that provokes an error or warning. -dnl -dnl We prefer to suppress the warning from solaris 2.8 to stop anyone -dnl worrying something might be wrong. - -AC_DEFUN(GMP_CHECK_ASM_ALIGN_FILL_0x90, -[AC_CACHE_CHECK([if the .align directive accepts an 0x90 fill in .text], - gmp_cv_check_asm_align_fill_0x90, -[AC_REQUIRE([GMP_CHECK_ASM_TEXT]) -cat > conftest.s <&AC_FD_CC - if echo "$gmp_tmp_val" | grep "Warning: Fill parameter ignored for executable section"; then - echo "Supressing this warning by omitting 0x90" 1>&AC_FD_CC - gmp_cv_check_asm_align_fill_0x90=no - else - gmp_cv_check_asm_align_fill_0x90=yes - fi -else - echo "Non-zero exit code" 1>&AC_FD_CC - echo "$gmp_tmp_val" 1>&AC_FD_CC - gmp_cv_check_asm_align_fill_0x90=no -fi -rm -f conftest* -]) -GMP_DEFINE_RAW( -["define(,<$gmp_cv_check_asm_align_fill_0x90>)"]) -]) - - -dnl GMP_CHECK_ASM_TEXT -AC_DEFUN(GMP_CHECK_ASM_TEXT, -[AC_CACHE_CHECK([how to switch to text section], gmp_cv_check_asm_text, -[case "$target" in - *-*-aix*) - changequote({, }) - gmp_cv_check_asm_text={".csect .text[PR]"} - changequote([, ]) - ;; - *-*-hpux*) gmp_cv_check_asm_text=[".code"] ;; - *) gmp_cv_check_asm_text=[".text"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_text>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_DATA -dnl Can we say `.data'? -AC_DEFUN(GMP_CHECK_ASM_DATA, -[AC_CACHE_CHECK([how to switch to data section], gmp_cv_check_asm_data, -[case "$target" in - *-*-aix*) - changequote({, }) - gmp_cv_check_asm_data={".csect .data[RW]"} - changequote([, ]) - ;; - *) gmp_cv_check_asm_data=[".data"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_data>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_GLOBL -dnl Can we say `.global'? -AC_DEFUN(GMP_CHECK_ASM_GLOBL, -[AC_CACHE_CHECK([how to export a symbol], gmp_cv_check_asm_globl, -[case "$target" in - *-*-hpux*) gmp_cv_check_asm_globl=[".export"] ;; - *) gmp_cv_check_asm_globl=[".globl"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_globl>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_TYPE -dnl Can we say `.type'? -AC_DEFUN(GMP_CHECK_ASM_TYPE, -[AC_CACHE_CHECK([how the .type assembly directive should be used], -gmp_cv_check_asm_type, -[ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -for gmp_tmp_prefix in @ \# %; do - echo " .type sym,${gmp_tmp_prefix}function" > conftest.s - if AC_TRY_EVAL(ac_assemble); then - gmp_cv_check_asm_type="[.type \$][1,${gmp_tmp_prefix}\$][2]" - break - fi -done -if test -z "$gmp_cv_check_asm_type"; then - gmp_cv_check_asm_type="[dnl]" -fi -]) -echo ["define(, <$gmp_cv_check_asm_type>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_SIZE -dnl Can we say `.size'? -AC_DEFUN(GMP_CHECK_ASM_SIZE, -[AC_CACHE_CHECK([if the .size assembly directive works], gmp_cv_check_asm_size, -[ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -echo ' .size sym,1' > conftest.s -if AC_TRY_EVAL(ac_assemble); then - gmp_cv_check_asm_size="[.size \$][1,\$][2]" -else - gmp_cv_check_asm_size="[dnl]" -fi -]) -echo ["define(, <$gmp_cv_check_asm_size>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_LSYM_PREFIX -dnl What is the prefix for a local label? -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_LSYM_PREFIX, -[AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([what prefix to use for a local label], -gmp_cv_check_asm_lsym_prefix, -[if test -z "$NM"; then - echo; echo ["$0: fatal: need nm"] - exit 1 -fi -ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -gmp_cv_check_asm_lsym_prefix="L" -for gmp_tmp_pre in L .L $ L$; do - cat > conftest.s </dev/null 2>&1 - gmp_rc=$? - if test "$gmp_rc" != "0"; then - echo "configure: $NM failure, using default" - break - fi - if $NM conftest.o | grep gurkmacka >/dev/null; then true; else - gmp_cv_check_asm_lsym_prefix="$gmp_tmp_pre" - break - fi - else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC - # Use default. - fi -done -rm -f conftest* -]) -echo ["define(, <${gmp_cv_check_asm_lsym_prefix}>)"] >> $gmp_tmpconfigm4 -]) - -dnl GMP_CHECK_ASM_W32 -dnl How to [define] a 32-bit word. -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_W32, -[AC_REQUIRE([GMP_CHECK_ASM_DATA]) -AC_REQUIRE([GMP_CHECK_ASM_GLOBL]) -AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([how to [define] a 32-bit word], - gmp_cv_check_asm_w32, -[if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 -fi - -# 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. - -case "$target" in - *-*-hpux*) - gmp_cv_check_asm_w32=".word" - ;; - *-*-*) - ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" - for gmp_tmp_op in .long .word; do - cat > conftest.s <) - gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "4"; then - gmp_cv_check_asm_w32="$gmp_tmp_op" - break - fi - fi - done - ;; -esac - -if test -z "$gmp_cv_check_asm_w32"; then - echo; echo ["configure: $0: fatal: do not know how to define a 32-bit word"] - exit 1 -fi -rm -f conftest* -]) -echo ["define(, <$gmp_cv_check_asm_w32>)"] >> $gmp_tmpconfigm4 -]) - -dnl GMP_CHECK_ASM_MMX([ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]]) -dnl Can we assemble MMX insns? -AC_DEFUN(GMP_CHECK_ASM_MMX, -[AC_REQUIRE([GMP_CHECK_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler knows about MMX instructions], - gmp_cv_check_asm_mmx, -[cat > conftest.s < conftest.s <conftest.c </dev/null]), -[^.*$1[ ]+],[]), -[[ - ]*$],[])]) - - -dnl GMP_VERSION -dnl ----------- -dnl The gmp version number, extracted from the #defines in gmp.h. -dnl Two digits like 3.0 if patchlevel <= 0, or three digits like 3.0.1 if -dnl patchlevel > 0. - -define(GMP_VERSION, -[GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp.h)[]dnl -.GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp.h)[]dnl -ifelse(m4_eval(GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h) > 0),1, -[.GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h)])]) - - -dnl GMP_PROG_M4() -dnl ------------- -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 it tests each m4 found to see if -dnl it's good enough. -dnl -dnl See mpn/asm-defs.m4 for details on the known bad m4s. - -AC_DEFUN(GMP_PROG_M4, -[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! -[define(dollarhash,``$][#'')dnl -ifelse(dollarhash(x),1,`define(t1,Y)', -``bad: $][# not supported (SunOS /usr/bin/m4) -'')dnl -ifelse(eval(89),89,`define(t2,Y)', -`bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4) -')dnl -ifelse(t1`'t2,YY,`good -')dnl] -EOF - echo "trying m4" 1>&AC_FD_CC - gmp_tmp_val="`(m4 conftest.m4) 2>&AC_FD_CC`" - echo "$gmp_tmp_val" 1>&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" 1>&AC_FD_CC - gmp_tmp_val="`($ac_dir/m4 conftest.m4) 2>&AC_FD_CC`" - echo "$gmp_tmp_val" 1>&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_PROG_CC_FIND([CC_LIST], [REQ_64BIT_CC]) -dnl Find first working compiler in CC_LIST. -dnl If REQ_64BIT_CC is "yes", the compiler is required to be able to -dnl produce 64-bit code. -dnl NOTE: If a compiler needs any special flags for producing 64-bit code, -dnl these have to be found in shell variable `gmp_cflags64_{cc}', where `{cc}' -dnl is the name of the compiler. -dnl Set CC to the name of the first working compiler. -dnl If a 64-bit compiler is found, set CC64 to the name of the compiler and -dnl CFLAGS64 to flags to use. -dnl This macro does not test if any of the compilers found is a GNU compiler. -dnl To do this, when you have finally made up your mind on which one to use, -dnl and set CC accordingly, invoke [GMP_PROG_CC_SELECT]. That macro will -dnl also make sure that your selection of CFLAGS is valid. -dnl -AC_DEFUN(GMP_PROG_CC_FIND, -[AC_BEFORE([$0], [CC_PROG_CPP]) -ifelse([$1], , gmp_cc_list="gcc cc", gmp_cc_list="[$1]") -ifelse([$2], , gmp_req_64bit_cc="no", gmp_req_64bit_cc="[$2]") - -CC32= -CC64= -for c in $gmp_cc_list; do - # Avoid cache hits. - unset CC - unset ac_cv_prog_CC - AC_CHECK_TOOL(CC, $c, $c) - if test -n "$CC"; then - eval c_flags=\$gmp_cflags_$c - GMP_PROG_CC_WORKS($CC, $c_flags, - gmp_prog_cc_works=yes, - gmp_prog_cc_works=no) - - if test "$gmp_prog_cc_works" != "yes"; then - continue - fi - - # Save first working compiler, whether 32- or 64-bit capable. - if test -z "$CC32"; then - CC32="$CC" - fi - if test "$gmp_req_64bit_cc" = "yes"; then - eval c_flags=\$gmp_cflags64_$c - - # Verify that the compiler works in 64-bit mode as well. - # /usr/ucb/cc on Solaris 7 can *compile* in 64-bit mode, but not link. - GMP_PROG_CC_WORKS($c, $c_flags, - gmp_prog_cc_works=yes, - gmp_prog_cc_works=no) - - if test "$gmp_prog_cc_works" = "yes"; then - GMP_CHECK_CC_64BIT($c, $c_flags) - if test "$gmp_cv_cc_64bit" = "yes"; then - test -z "$CC64" && CC64="$c" - test -z "$CFLAGS64" && CFLAGS64="$c_flags" - # We have CC64 so we're done. - break - fi - fi - else - # We have CC32, and we don't need a 64-bit compiler so we're done. - break - fi - fi -done -CC="$CC32" -])dnl - -dnl GMP_PROG_CC_SELECT -dnl Check that `CC' works with `CFLAGS'. Check if `CC' is a GNU compiler. -dnl Cache the result as `ac_cv_prog_CC'. -AC_DEFUN(GMP_PROG_CC_SELECT, -[AC_BEFORE([$0], [CC_PROG_CPP]) -AC_PROG_CC_WORKS -AC_PROG_CC_GNU - -if test "$ac_cv_prog_gcc" = "yes"; then - GCC=yes -else - GCC= -fi - -# Set CFLAGS if not already set. -if test -z "$CFLAGS"; then - CFLAGS="-g" - if test "$GCC" = "yes"; then - CFLAGS="$CFLAGS -O2" - fi -fi - -AC_SUBST(CC) -AC_CACHE_VAL(ac_cv_prog_CC, ac_cv_prog_CC="$CC") -AC_PROVIDE([AC_PROG_CC]) -])dnl - -dnl GMP_CHECK_CC_64BIT(cc, cflags64) -dnl Find out if `CC' can produce 64-bit code. -dnl Requires NM to be set to nm for target. -dnl FIXME: Cache result. -AC_DEFUN(GMP_CHECK_CC_64BIT, -[ - gmp_tmp_CC_save="$CC" - CC="[$1]" - AC_MSG_CHECKING([whether the C compiler ($CC) is 64-bit capable]) - if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 - fi - gmp_tmp_CFLAGS_save="$CFLAGS" - CFLAGS="[$2]" - - case "$target" in - hppa2.0*-*-*) - # FIXME: If gcc is installed under another name than "gcc", we will - # test the wrong thing. - if test "$CC" != "gcc"; then - dnl Let compiler version A.10.32.30 or higher be ok. - dnl Bad compiler output: - dnl ccom: HP92453-01 G.10.32.05 HP C Compiler - dnl Good compiler output: - dnl ccom: HP92453-01 A.10.32.30 HP C Compiler - echo >conftest.c - gmp_tmp_vs=`$CC $CFLAGS -V -c -o conftest.o conftest.c 2>&1 | grep "^ccom:"` - rm conftest* - gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\(.*\)\..*\..* HP C.*/\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/'` - gmp_cv_cc_64bit=no - test -n "$gmp_tmp_v1" && test "$gmp_tmp_v1" -ge "10" \ - && test -n "$gmp_tmp_v2" && test "$gmp_tmp_v2" -ge "32" \ - && test -n "$gmp_tmp_v3" && test "$gmp_tmp_v3" -ge "30" \ - && gmp_cv_cc_64bit=yes - else # gcc - # FIXME: Compile a minimal file and determine if the resulting object - # file is an ELF file. If so, gcc can produce 64-bit code. - # Do we have file(1) for target? - gmp_cv_cc_64bit=no - fi - ;; - mips-sgi-irix6.*) - # We use `-n32' to cc and `-mabi=n32' to gcc, resulting in 64-bit - # arithmetic but not 64-bit pointers, so the general test for sizeof - # (void *) is not valid. - # Simply try to compile an empty main. If that succeeds return - # true. - AC_TRY_COMPILE( , , - gmp_cv_cc_64bit=yes, gmp_cv_cc_64bit=no, - gmp_cv_cc_64bit=no) - ;; - *-*-*) - # Allocate an array of size sizeof (void *) and use nm to determine its - # size. We depend on the first declared variable being put at address 0. - cat >conftest.c <)dnl - gmp_tmp_val=`$NM conftest.o | grep post | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "8"; then - gmp_cv_cc_64bit=yes - else - gmp_cv_cc_64bit=no - fi - else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC - gmp_cv_cc_64bit=no - fi - rm -f conftest* - ;; - esac - - CC="$gmp_tmp_CC_save" - CFLAGS="$gmp_tmp_CFLAGS_save" - AC_MSG_RESULT($gmp_cv_cc_64bit) -])dnl - -dnl GMP_INIT([M4-DEF-FILE]) -dnl -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 -test -f $gmp_tmpconfigm4 && rm $gmp_tmpconfigm4 -test -f $gmp_tmpconfigm4i && rm $gmp_tmpconfigm4i -test -f $gmp_tmpconfigm4p && rm $gmp_tmpconfigm4p -])dnl - -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 ["dnl $gmp_configm4. Generated automatically by configure."] > $gmp_configm4 -if test -f $gmp_tmpconfigm4; then - echo ["changequote(<,>)dnl"] >> $gmp_configm4 - echo ["ifdef(<__CONFIG_M4_INCLUDED__>,,<"] >> $gmp_configm4 - cat $gmp_tmpconfigm4 >> $gmp_configm4 - echo [">)"] >> $gmp_configm4 - echo ["changequote(\`,')dnl"] >> $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 - -dnl GMP_INCLUDE(FILE) -AC_DEFUN(GMP_INCLUDE, -[AC_REQUIRE([GMP_INIT]) -echo ["include(\`$1')"] >> $gmp_tmpconfigm4i -])dnl - -dnl GMP_SINCLUDE(FILE) -AC_DEFUN(GMP_SINCLUDE, -[AC_REQUIRE([GMP_INIT]) -echo ["sinclude(\`$1')"] >> $gmp_tmpconfigm4i -])dnl - -dnl GMP_DEFINE(MACRO, DEFINITION [, LOCATION]) -dnl [ Define M4 macro MACRO as DEFINITION in temporary file. ] -dnl [ If LOCATION is `POST', the definition will appear after any ] -dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ] -dnl [ Mind the quoting! No shell variables will get expanded. ] -dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ] -dnl [ config.m4 uses `<' and '>' as quote characters for all defines. ] -AC_DEFUN(GMP_DEFINE, -[AC_REQUIRE([GMP_INIT]) -echo ['define(<$1>, <$2>)'] >> ifelse([$3], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -])dnl - -dnl GMP_DEFINE_RAW(STRING, [, LOCATION]) -dnl [ Put STRING in temporary file. ] -dnl [ If LOCATION is `POST', the definition will appear after any ] -dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ] -dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ] -AC_DEFUN(GMP_DEFINE_RAW, -[AC_REQUIRE([GMP_INIT]) -echo [$1] >> ifelse([$2], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4) -])dnl - -dnl GMP_CHECK_ASM_LABEL_SUFFIX -dnl Should a label have a colon or not? -AC_DEFUN(GMP_CHECK_ASM_LABEL_SUFFIX, -[AC_CACHE_CHECK([what assembly label suffix to use], - gmp_cv_check_asm_label_suffix, -[case "$target" in - *-*-hpux*) gmp_cv_check_asm_label_suffix=[""] ;; - *) gmp_cv_check_asm_label_suffix=[":"] ;; -esac -]) -echo ["define(, <\$][1$gmp_cv_check_asm_label_suffix>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_UNDERSCORE([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -dnl Shamelessly borrowed from glibc. -AC_DEFUN(GMP_CHECK_ASM_UNDERSCORE, -[AC_CACHE_CHECK([if symbols are prefixed by underscore], - gmp_cv_check_asm_underscore, -[cat > conftest.$ac_ext </dev/null; then - gmp_cv_check_asm_underscore=yes - else - gmp_cv_check_asm_underscore=no - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -fi -rm -f conftest* -]) -if test "$gmp_cv_check_asm_underscore" = "yes"; then - GMP_DEFINE(GSYM_PREFIX, [_]) - ifelse([$1], , :, [$1]) -else - GMP_DEFINE(GSYM_PREFIX, []) - ifelse([$2], , :, [$2]) -fi -])dnl - -dnl GMP_CHECK_ASM_ALIGN_LOG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -dnl Is parameter to `.align' logarithmic? -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_ALIGN_LOG, -[AC_REQUIRE([GMP_CHECK_ASM_GLOBL]) -AC_REQUIRE([GMP_CHECK_ASM_DATA]) -AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([if .align assembly directive is logarithmic], - gmp_cv_check_asm_align_log, -[if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 -fi -cat > conftest.s <) - gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "10" || test "$gmp_tmp_val" = "16"; then - gmp_cv_check_asm_align_log=yes - else - gmp_cv_check_asm_align_log=no - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC -fi -rm -f conftest* -]) -GMP_DEFINE_RAW(["define(,<$gmp_cv_check_asm_align_log>)"]) -if test "$gmp_cv_check_asm_align_log" = "yes"; then - ifelse([$1], , :, [$1]) -else - ifelse([$2], , :, [$2]) -fi -])dnl - - -dnl GMP_CHECK_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, where 0x90 is a "nop". -dnl -dnl Old gas, eg. 1.92.3 - needs ",0x90" or else the fill is an invalid 0x00. -dnl New gas, eg. 2.91 - generates the good multibyte nop fills even when -dnl ",0x90" is given. -dnl Solaris 2.6 as - doesn't allow ",0x90", gives a fatal error. -dnl Solaris 2.8 as - gives a warning for ",0x90", no ill effect. -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 sample. It's -dnl only the second .align that provokes an error or warning. -dnl -dnl We prefer to suppress the warning from solaris 2.8 to stop anyone -dnl worrying something might be wrong. - -AC_DEFUN(GMP_CHECK_ASM_ALIGN_FILL_0x90, -[AC_CACHE_CHECK([if the .align directive accepts an 0x90 fill in .text], - gmp_cv_check_asm_align_fill_0x90, -[AC_REQUIRE([GMP_CHECK_ASM_TEXT]) -cat > conftest.s <&AC_FD_CC - if echo "$gmp_tmp_val" | grep "Warning: Fill parameter ignored for executable section"; then - echo "Supressing this warning by omitting 0x90" 1>&AC_FD_CC - gmp_cv_check_asm_align_fill_0x90=no - else - gmp_cv_check_asm_align_fill_0x90=yes - fi -else - echo "Non-zero exit code" 1>&AC_FD_CC - echo "$gmp_tmp_val" 1>&AC_FD_CC - gmp_cv_check_asm_align_fill_0x90=no -fi -rm -f conftest* -]) -GMP_DEFINE_RAW( -["define(,<$gmp_cv_check_asm_align_fill_0x90>)"]) -]) - - -dnl GMP_CHECK_ASM_TEXT -AC_DEFUN(GMP_CHECK_ASM_TEXT, -[AC_CACHE_CHECK([how to switch to text section], gmp_cv_check_asm_text, -[case "$target" in - *-*-aix*) - changequote({, }) - gmp_cv_check_asm_text={".csect .text[PR]"} - changequote([, ]) - ;; - *-*-hpux*) gmp_cv_check_asm_text=[".code"] ;; - *) gmp_cv_check_asm_text=[".text"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_text>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_DATA -dnl Can we say `.data'? -AC_DEFUN(GMP_CHECK_ASM_DATA, -[AC_CACHE_CHECK([how to switch to data section], gmp_cv_check_asm_data, -[case "$target" in - *-*-aix*) - changequote({, }) - gmp_cv_check_asm_data={".csect .data[RW]"} - changequote([, ]) - ;; - *) gmp_cv_check_asm_data=[".data"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_data>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_GLOBL -dnl Can we say `.global'? -AC_DEFUN(GMP_CHECK_ASM_GLOBL, -[AC_CACHE_CHECK([how to export a symbol], gmp_cv_check_asm_globl, -[case "$target" in - *-*-hpux*) gmp_cv_check_asm_globl=[".export"] ;; - *) gmp_cv_check_asm_globl=[".globl"] ;; -esac -]) -echo ["define(, <$gmp_cv_check_asm_globl>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_TYPE -dnl Can we say `.type'? -AC_DEFUN(GMP_CHECK_ASM_TYPE, -[AC_CACHE_CHECK([how the .type assembly directive should be used], -gmp_cv_check_asm_type, -[ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -for gmp_tmp_prefix in @ \# %; do - echo " .type sym,${gmp_tmp_prefix}function" > conftest.s - if AC_TRY_EVAL(ac_assemble); then - gmp_cv_check_asm_type="[.type \$][1,${gmp_tmp_prefix}\$][2]" - break - fi -done -if test -z "$gmp_cv_check_asm_type"; then - gmp_cv_check_asm_type="[dnl]" -fi -]) -echo ["define(, <$gmp_cv_check_asm_type>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_SIZE -dnl Can we say `.size'? -AC_DEFUN(GMP_CHECK_ASM_SIZE, -[AC_CACHE_CHECK([if the .size assembly directive works], gmp_cv_check_asm_size, -[ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -echo ' .size sym,1' > conftest.s -if AC_TRY_EVAL(ac_assemble); then - gmp_cv_check_asm_size="[.size \$][1,\$][2]" -else - gmp_cv_check_asm_size="[dnl]" -fi -]) -echo ["define(, <$gmp_cv_check_asm_size>)"] >> $gmp_tmpconfigm4 -])dnl - -dnl GMP_CHECK_ASM_LSYM_PREFIX -dnl What is the prefix for a local label? -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_LSYM_PREFIX, -[AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([what prefix to use for a local label], -gmp_cv_check_asm_lsym_prefix, -[if test -z "$NM"; then - echo; echo ["$0: fatal: need nm"] - exit 1 -fi -ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" -gmp_cv_check_asm_lsym_prefix="L" -for gmp_tmp_pre in L .L $ L$; do - cat > conftest.s </dev/null 2>&1 - gmp_rc=$? - if test "$gmp_rc" != "0"; then - echo "configure: $NM failure, using default" - break - fi - if $NM conftest.o | grep gurkmacka >/dev/null; then true; else - gmp_cv_check_asm_lsym_prefix="$gmp_tmp_pre" - break - fi - else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.s >&AC_FD_CC - # Use default. - fi -done -rm -f conftest* -]) -echo ["define(, <${gmp_cv_check_asm_lsym_prefix}>)"] >> $gmp_tmpconfigm4 -]) - -dnl GMP_CHECK_ASM_W32 -dnl How to [define] a 32-bit word. -dnl Requires NM to be set to nm for target. -AC_DEFUN(GMP_CHECK_ASM_W32, -[AC_REQUIRE([GMP_CHECK_ASM_DATA]) -AC_REQUIRE([GMP_CHECK_ASM_GLOBL]) -AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX]) -AC_CACHE_CHECK([how to [define] a 32-bit word], - gmp_cv_check_asm_w32, -[if test -z "$NM"; then - echo; echo ["configure: $0: fatal: need nm"] - exit 1 -fi - -# 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. - -case "$target" in - *-*-hpux*) - gmp_cv_check_asm_w32=".word" - ;; - *-*-*) - ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC" - for gmp_tmp_op in .long .word; do - cat > conftest.s <) - gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - changequote([, ])dnl - if test "$gmp_tmp_val" = "4"; then - gmp_cv_check_asm_w32="$gmp_tmp_op" - break - fi - fi - done - ;; -esac - -if test -z "$gmp_cv_check_asm_w32"; then - echo; echo ["configure: $0: fatal: do not know how to define a 32-bit word"] - exit 1 -fi -rm -f conftest* -]) -echo ["define(, <$gmp_cv_check_asm_w32>)"] >> $gmp_tmpconfigm4 -]) - -dnl GMP_CHECK_ASM_MMX([ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]]) -dnl Can we assemble MMX insns? -AC_DEFUN(GMP_CHECK_ASM_MMX, -[AC_REQUIRE([GMP_CHECK_ASM_TEXT]) -AC_CACHE_CHECK([if the assembler knows about MMX instructions], - gmp_cv_check_asm_mmx, -[cat > conftest.s < conftest.s <conftest.c < -#include -#include -#include -/* 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; -} -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; -], [ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; -], -[am_cv_prog_cc_stdc="$ac_arg"; break]) -done -CC="$ac_save_CC" -]) -if test -z "$am_cv_prog_cc_stdc"; then - AC_MSG_RESULT([none needed]) -else - AC_MSG_RESULT($am_cv_prog_cc_stdc) -fi -case "x$am_cv_prog_cc_stdc" in - x|xno) ;; - *) CC="$CC $am_cv_prog_cc_stdc" ;; -esac -]) - -# Do all the work for Automake. 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. - -# serial 1 - -dnl Usage: -dnl AM_INIT_AUTOMAKE(package,version, [no-define]) - -AC_DEFUN(AM_INIT_AUTOMAKE, -[AC_REQUIRE([AC_PROG_INSTALL]) -dnl We require 2.13 because we rely on SHELL being computed by configure. -AC_PREREQ([2.13]) -PACKAGE=[$1] -AC_SUBST(PACKAGE) -VERSION=[$2] -AC_SUBST(VERSION) -dnl test to see if srcdir already configured -if test "`CDPATH=: && cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi -ifelse([$3],, -AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) -AC_REQUIRE([AM_SANITY_CHECK]) -AC_REQUIRE([AC_ARG_PROGRAM]) -AM_MISSING_PROG(ACLOCAL, aclocal) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_MISSING_PROG(AMTAR, tar) -AM_MISSING_INSTALL_SH -dnl We need awk for the "check" target. The system "awk" is bad on -dnl some platforms. -AC_REQUIRE([AC_PROG_AWK]) -AC_REQUIRE([AC_PROG_MAKE_SET]) -AC_REQUIRE([AM_DEP_TRACK]) -AC_REQUIRE([AM_SET_DEPDIR]) -ifdef([AC_PROVIDE_AC_PROG_CC], [AM_DEPENDENCIES(CC)], [ - define([AC_PROG_CC], defn([AC_PROG_CC])[AM_DEPENDENCIES(CC)])]) -ifdef([AC_PROVIDE_AC_PROG_CXX], [AM_DEPENDENCIES(CXX)], [ - define([AC_PROG_CXX], defn([AC_PROG_CXX])[AM_DEPENDENCIES(CXX)])]) -]) - -# -# Check to make sure that the build environment is sane. -# - -AC_DEFUN(AM_SANITY_CHECK, -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftestfile -# 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 ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "[$]*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "[$]*" != "X $srcdir/configure conftestfile" \ - && test "[$]*" != "X conftestfile $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 - - test "[$]2" = conftestfile - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -rm -f conftest* -AC_MSG_RESULT(yes)]) - -dnl 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)]) - -dnl Like AM_MISSING_PROG, but only looks for install-sh. -dnl AM_MISSING_INSTALL_SH() -AC_DEFUN(AM_MISSING_INSTALL_SH, [ -AC_REQUIRE([AM_MISSING_HAS_RUN]) -if test -z "$install_sh"; then - install_sh="$ac_aux_dir/install-sh" - test -f "$install_sh" || install_sh="$ac_aux_dir/install.sh" - test -f "$install_sh" || install_sh="${am_missing_run}${ac_auxdir}/install-sh" - dnl FIXME: an evil hack: we remove the SHELL invocation from - dnl install_sh because automake adds it back in. Sigh. - install_sh="`echo $install_sh | sed -e 's/\${SHELL}//'`" -fi -AC_SUBST(install_sh)]) - -dnl AM_MISSING_HAS_RUN. -dnl Define MISSING if not defined so far and test if it supports --run. -dnl If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], [ -test x"${MISSING+set}" = xset || \ - MISSING="\${SHELL} `CDPATH=: && cd $ac_aux_dir && pwd`/missing" -dnl Use eval to expand $SHELL -if eval "$MISSING --run :"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - am_backtick='`' - AC_MSG_WARN([${am_backtick}missing' script is too old or missing]) -fi -]) - -dnl See how the compiler implements dependency checking. -dnl Usage: -dnl AM_DEPENDENCIES(NAME) -dnl NAME is "CC", "CXX" or "OBJC". - -dnl We try a few techniques and use that to set a single cache variable. - -AC_DEFUN(AM_DEPENDENCIES,[ -AC_REQUIRE([AM_SET_DEPDIR]) -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS]) -ifelse([$1],CC,[ -AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([AC_PROG_CPP]) -depcc="$CC" -depcpp="$CPP"],[$1],CXX,[ -AC_REQUIRE([AC_PROG_CXX]) -AC_REQUIRE([AC_PROG_CXXCPP]) -depcc="$CXX" -depcpp="$CXXCPP"],[$1],OBJC,[ -am_cv_OBJC_dependencies_compiler_type=gcc],[ -AC_REQUIRE([AC_PROG_][$1]) -depcc="$[$1]" -depcpp=""]) -AC_MSG_CHECKING([dependency style of $depcc]) -AC_CACHE_VAL(am_cv_[$1]_dependencies_compiler_type,[ -if test -z "$AMDEP"; then - echo '#include "conftest.h"' > conftest.c - echo 'int i;' > conftest.h - - am_cv_[$1]_dependencies_compiler_type=none - for depmode in `sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < "$am_depcomp"`; do - case "$depmode" in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - if depmode="$depmode" \ - source=conftest.c object=conftest.o \ - depfile=conftest.Po tmpdepfile=conftest.TPo \ - $SHELL $am_depcomp $depcc -c conftest.c 2>/dev/null && - grep conftest.h conftest.Po > /dev/null 2>&1; then - am_cv_[$1]_dependencies_compiler_type="$depmode" - break - fi - done - - rm -f conftest.* -else - am_cv_[$1]_dependencies_compiler_type=none -fi -]) -AC_MSG_RESULT($am_cv_[$1]_dependencies_compiler_type) -[$1]DEPMODE="depmode=$am_cv_[$1]_dependencies_compiler_type" -AC_SUBST([$1]DEPMODE) -]) - -dnl Choose a directory name for dependency files. -dnl This macro is AC_REQUIREd in AM_DEPENDENCIES - -AC_DEFUN(AM_SET_DEPDIR,[ -if test -d .deps || mkdir .deps 2> /dev/null || test -d .deps; then - DEPDIR=.deps -else - DEPDIR=_deps -fi -AC_SUBST(DEPDIR) -]) - -AC_DEFUN(AM_DEP_TRACK,[ -AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking Speeds up one-time builds - --enable-dependency-tracking Do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" = xno; then - AMDEP="#" -else - am_depcomp="$ac_aux_dir/depcomp" - if test ! -f "$am_depcomp"; then - AMDEP="#" - else - AMDEP= - fi -fi -AC_SUBST(AMDEP) -if test -z "$AMDEP"; then - AMDEPBACKSLASH='\' -else - AMDEPBACKSLASH= -fi -pushdef([subst], defn([AC_SUBST])) -subst(AMDEPBACKSLASH) -popdef([subst]) -]) - -dnl Generate code to set up dependency tracking. -dnl This macro should only be invoked once -- use via AC_REQUIRE. -dnl Usage: -dnl AM_OUTPUT_DEPENDENCY_COMMANDS - -dnl -dnl This code is only required when automatic dependency tracking -dnl is enabled. FIXME. This creates each `.P' file that we will -dnl need in order to bootstrap the dependency handling code. -AC_DEFUN(AM_OUTPUT_DEPENDENCY_COMMANDS,[ -AC_OUTPUT_COMMANDS([ -test x"$AMDEP" != x"" || -for mf in $CONFIG_FILES; do - case "$mf" in - Makefile) dirpart=.;; - */Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;; - *) continue;; - esac - grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue - # Extract the definition of DEP_FILES from the Makefile without - # running `make'. - DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` - test -z "$DEPDIR" && continue - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n -e '/^U = / s///p' < "$mf"` - test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" - # We invoke sed twice because it is the simplest approach to - # changing $(DEPDIR) to its actual value in the expansion. - for file in `sed -n -e ' - /^DEP_FILES = .*\\\\$/ { - s/^DEP_FILES = // - :loop - s/\\\\$// - p - n - /\\\\$/ b loop - p - } - /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`echo "$file" | sed -e 's|/[^/]*$||'` - $ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1 - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -], [AMDEP="$AMDEP" -ac_aux_dir="$ac_aux_dir"])]) - -# Like AC_CONFIG_HEADER, but automatically create stamp file. - -AC_DEFUN(AM_CONFIG_HEADER, -[AC_PREREQ([2.12]) -AC_CONFIG_HEADER([$1]) -dnl When config.status generates a header, we must update the stamp-h file. -dnl This file resides in the same directory as the config header -dnl that is generated. We must strip everything past the first ":", -dnl and everything past the last "/". -AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl -ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, -<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, -<>; do - case " <<$>>CONFIG_HEADERS " in - *" <<$>>am_file "*<<)>> - echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx - ;; - esac - am_indx=`expr "<<$>>am_indx" + 1` -done<<>>dnl>>) -changequote([,]))]) - -# Add --enable-maintainer-mode option to configure. -# From Jim Meyering - -# serial 1 - -AC_DEFUN(AM_MAINTAINER_MODE, -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) - AC_MSG_RESULT($USE_MAINTAINER_MODE) - AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl -] -) - -# Define a conditional. - -AC_DEFUN(AM_CONDITIONAL, -[AC_SUBST($1_TRUE) -AC_SUBST($1_FALSE) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi]) - - -# serial 42 AC_PROG_LIBTOOL -AC_DEFUN(AC_PROG_LIBTOOL, -[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl - -# Save cache, so that ltconfig can load it -AC_CACHE_SAVE - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -AR="$AR" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -MAGIC="$MAGIC" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \ -AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \ -objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \ -deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $lt_target \ -|| AC_MSG_ERROR([libtool configure failed]) - -# Reload cache, that may have been modified by ltconfig -AC_CACHE_LOAD - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log -]) - -AC_DEFUN(AC_LIBTOOL_SETUP, -[AC_PREREQ(2.13)dnl -AC_REQUIRE([AC_ENABLE_SHARED])dnl -AC_REQUIRE([AC_ENABLE_STATIC])dnl -AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_LD])dnl -AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl -AC_REQUIRE([AC_PROG_NM])dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl -AC_REQUIRE([AC_OBJEXT])dnl -AC_REQUIRE([AC_EXEEXT])dnl -dnl - -# Only perform the check for file, if the check method requires it -case "$deplibs_check_method" in -file_magic*) - if test "$file_magic_cmd" = '${MAGIC}'; then - AC_PATH_MAGIC - fi - ;; -esac - -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; -esac - -AC_CHECK_TOOL(RANLIB, ranlib, :) -AC_CHECK_TOOL(STRIP, strip, :) - -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" -ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], -[libtool_flags="$libtool_flags --enable-dlopen"]) -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[libtool_flags="$libtool_flags --enable-win32-dll"]) -AC_ARG_ENABLE(libtool-lock, - [ --disable-libtool-lock avoid locking (might break parallel builds)]) -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - -AC_ARG_WITH(pic, - [ --with-pic try to use only PIC/non-PIC objects [default=use both]], - pic_mode="$withval", pic_mode=default) -test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" -test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$lt_target" in -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - 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_SAVE - AC_LANG_C - AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_RESTORE]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - -ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], -[*-*-cygwin* | *-*-mingw*) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one - AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, - [AC_TRY_LINK([], - [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); - DllMain (0, 0, 0);], - [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) - - case "$lt_target/$CC" in - *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) - # old mingw systems require "-dll" to link a DLL, while more recent ones - # require "-mdll" - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -mdll" - AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, - [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) - CFLAGS="$SAVE_CFLAGS" ;; - *-*-cygwin*) - # cygwin systems need to pass --dll to the linker, and not link - # crt.o which will require a WinMain@16 definition. - lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; - esac - ;; - ]) -esac -]) - -# AC_LIBTOOL_DLOPEN - enable checks for dlopen support -AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) - -# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's -AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) - -# AC_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AC_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_SHARED, [dnl -define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(shared, -changequote(<<, >>)dnl -<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], -changequote([, ])dnl -[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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl -]) - -# AC_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_SHARED(no)]) - -# AC_ENABLE_STATIC - implement the --enable-static flag -# Usage: AC_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_STATIC, [dnl -define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(static, -changequote(<<, >>)dnl -<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], -changequote([, ])dnl -[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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_static=AC_ENABLE_STATIC_DEFAULT)dnl -]) - -# AC_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_STATIC(no)]) - - -# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag -# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl -define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(fast-install, -changequote(<<, >>)dnl -<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], -changequote([, ])dnl -[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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl -]) - -# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install -AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl -AC_ENABLE_FAST_INSTALL(no)]) - - -# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library -AC_DEFUN(AC_PATH_TOOL_PREFIX, -[AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC, -[case "$MAGIC" in - /*) - lt_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC="$MAGIC" - 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="ifelse([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC="$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="$lt_cv_path_MAGIC" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&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 - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC="$ac_save_MAGIC" - ;; -esac]) -MAGIC="$lt_cv_path_MAGIC" -if test -n "$MAGIC"; then - AC_MSG_RESULT($MAGIC) -else - AC_MSG_RESULT(no) -fi -]) - - -# AC_PATH_MAGIC - find a file program which can recognise a shared library -AC_DEFUN(AC_PATH_MAGIC, -[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl -AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH) -if test -z "$lt_cv_path_MAGIC"; then - if test -n "$ac_tool_prefix"; then - AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH) - else - MAGIC=: - fi -fi -]) - - -# AC_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN(AC_PROG_LD, -[AC_ARG_WITH(gnu-ld, -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], -test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - case $lt_target 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. -changequote(,)dnl - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' -changequote([,])dnl - # Canonicalize the path 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 "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(ac_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$ac_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]) -AC_PROG_LD_GNU -]) - -AC_DEFUN(AC_PROG_LD_GNU, -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi]) -with_gnu_ld=$ac_cv_prog_gnu_ld -]) - -# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker -# -- PORTME Some linkers may need a different reload flag. -AC_DEFUN(AC_PROG_LD_RELOAD_FLAG, -[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 -test -n "$reload_flag" && reload_flag=" $reload_flag" -]) - -# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies -# -- PORTME fill in with the dynamic library characteristics -AC_DEFUN(AC_DEPLIBS_CHECK_METHOD, -[AC_CACHE_CHECK([how to recognise dependant libraries], -lt_cv_deplibs_check_method, -[lt_cv_file_magic_cmd='${MAGIC}' -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 -# which responds to the $file_magic_cmd with a given egrep 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 -aix4* | beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi4*) - changequote(,)dnl - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - changequote([, ])dnl - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin* | mingw*) - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='${OBJDUMP} -f' - ;; - -freebsd*) - case "$version_type" in - freebsd-elf*) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -irix5* | irix6*) - case "$host_os" in - irix5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" - ;; - *) - case "$LD" in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - # this will be overridden with pass_all, but let us keep it just in case - changequote(,)dnl - lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" - changequote([, ])dnl - ;; - esac - lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux-gnu*) - case "$host_cpu" in - alpha* | i*86 | powerpc* | sparc* ) - lt_cv_deplibs_check_method=pass_all ;; - *) - # glibc up to 2.1.1 does not perform some relocations on ARM - changequote(,)dnl - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; - changequote([, ])dnl - esac - lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` - ;; - -osf3* | osf4* | osf5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' - lt_cv_file_magic_test_file=/shlib/libc.so - lt_cv_deplibs_check_method=pass_all - ;; - -sco3.2v5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - lt_cv_file_magic_test_file=/lib/libc.so - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - case "$host_vendor" in - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - motorola) - changequote(,)dnl - 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]' - changequote([, ])dnl - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - esac - ;; -esac -]) -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -]) - - -# AC_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN(AC_PROG_NM, -[AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - ac_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/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 - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - break - else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm -fi]) -NM="$ac_cv_path_NM" -AC_MSG_RESULT([$NM]) -]) - -# AC_CHECK_LIBM - check for math library -AC_DEFUN(AC_CHECK_LIBM, -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case "$lt_target" in -*-*-beos* | *-*-cygwin*) - # These system don't have libm - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, main, LIBM="-lm") - ;; -esac -]) - -# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl convenience library, adds --enable-ltdl-convenience to -# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor -# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed -# to be `${top_builddir}/libltdl'. Make sure you start DIR with -# '${top_builddir}/' (note the single quotes!) if your package is not -# flat, and, if you're not using automake, define top_builddir as -# appropriate in the Makefiles. -AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - case "$enable_ltdl_convenience" in - no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; - "") enable_ltdl_convenience=yes - ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; - esac - LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la - INCLTDL=ifelse($#,1,-I$1,['-I${top_srcdir}/libltdl']) -]) - -# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for -# the libltdl installable library, and adds --enable-ltdl-install to -# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor -# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed -# to be `${top_builddir}/libltdl'. Make sure you start DIR with -# '${top_builddir}/' (note the single quotes!) if your package is not -# flat, and, if you're not using automake, define top_builddir as -# appropriate in the Makefiles. -# In the future, this macro may have to be called after AC_PROG_LIBTOOL. -AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl - AC_CHECK_LIB(ltdl, main, - [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], - [if test x"$enable_ltdl_install" = xno; then - AC_MSG_WARN([libltdl not installed, but installation disabled]) - else - enable_ltdl_install=yes - fi - ]) - if test x"$enable_ltdl_install" = x"yes"; then - ac_configure_args="$ac_configure_args --enable-ltdl-install" - LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la - INCLTDL=ifelse($#,1,-I$1,['-I${top_srcdir}/libltdl']) - else - ac_configure_args="$ac_configure_args --enable-ltdl-install=no" - LIBLTDL="-lltdl" - INCLTDL= - fi -]) - -dnl old names -AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl -AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl -AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl -AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl -AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl -AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl -AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl - -dnl This is just to silence aclocal about the macro not being used -ifelse([AC_DISABLE_FAST_INSTALL])dnl - diff --git a/rts/gmp/ansi2knr.1 b/rts/gmp/ansi2knr.1 deleted file mode 100644 index f9ee5a6..0000000 --- a/rts/gmp/ansi2knr.1 +++ /dev/null @@ -1,36 +0,0 @@ -.TH ANSI2KNR 1 "19 Jan 1996" -.SH NAME -ansi2knr \- convert ANSI C to Kernighan & Ritchie C -.SH SYNOPSIS -.I ansi2knr -[--varargs] input_file [output_file] -.SH DESCRIPTION -If no output_file is supplied, output goes to stdout. -.br -There are no error messages. -.sp -.I ansi2knr -recognizes function definitions by seeing a non-keyword identifier at the left -margin, followed by a left parenthesis, with a right parenthesis as the last -character on the line, and with a left brace as the first token on the -following line (ignoring possible intervening comments). It will recognize a -multi-line header provided that no intervening line ends with a left or right -brace or a semicolon. These algorithms ignore whitespace and comments, except -that the function name must be the first thing on the line. -.sp -The following constructs will confuse it: -.br - - Any other construct that starts at the left margin and follows the -above syntax (such as a macro or function call). -.br - - Some macros that tinker with the syntax of the function header. -.sp -The --varargs switch is obsolete, and is recognized only for -backwards compatibility. The present version of -.I ansi2knr -will always attempt to convert a ... argument to va_alist and va_dcl. -.SH AUTHOR -L. Peter Deutsch wrote the original ansi2knr and -continues to maintain the current version; most of the code in the current -version is his work. ansi2knr also includes contributions by Francois -Pinard and Jim Avera . diff --git a/rts/gmp/ansi2knr.c b/rts/gmp/ansi2knr.c deleted file mode 100644 index 937c731..0000000 --- a/rts/gmp/ansi2knr.c +++ /dev/null @@ -1,677 +0,0 @@ -/* Copyright (C) 1989, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved. */ - -/* Convert ANSI C function definitions to K&R ("traditional C") syntax */ - -/* -ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY. No author or distributor accepts responsibility to anyone for the -consequences of using it or for whether it serves any particular purpose or -works at all, unless he says so in writing. Refer to the GNU General Public -License (the "GPL") for full details. - -Everyone is granted permission to copy, modify and redistribute ansi2knr, -but only under the conditions described in the GPL. A copy of this license -is supposed to have been given to you along with ansi2knr so you can know -your rights and responsibilities. It should be in a file named COPYLEFT, -or, if there is no file named COPYLEFT, a file named COPYING. Among other -things, the copyright notice and this notice must be preserved on all -copies. - -We explicitly state here what we believe is already implied by the GPL: if -the ansi2knr program is distributed as a separate set of sources and a -separate executable file which are aggregated on a storage medium together -with another program, this in itself does not bring the other program under -the GPL, nor does the mere fact that such a program or the procedures for -constructing it invoke the ansi2knr executable bring any other part of the -program under the GPL. -*/ - -/* - * Usage: - ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] - * --filename provides the file name for the #line directive in the output, - * overriding input_file (if present). - * If no input_file is supplied, input is read from stdin. - * If no output_file is supplied, output goes to stdout. - * There are no error messages. - * - * ansi2knr recognizes function definitions by seeing a non-keyword - * identifier at the left margin, followed by a left parenthesis, - * with a right parenthesis as the last character on the line, - * and with a left brace as the first token on the following line - * (ignoring possible intervening comments), except that a line - * consisting of only - * identifier1(identifier2) - * will not be considered a function definition unless identifier2 is - * the word "void", and a line consisting of - * identifier1(identifier2, <>) - * will not be considered a function definition. - * ansi2knr will recognize a multi-line header provided - * that no intervening line ends with a left or right brace or a semicolon. - * These algorithms ignore whitespace and comments, except that - * the function name must be the first thing on the line. - * The following constructs will confuse it: - * - Any other construct that starts at the left margin and - * follows the above syntax (such as a macro or function call). - * - Some macros that tinker with the syntax of function headers. - */ - -/* - * The original and principal author of ansi2knr is L. Peter Deutsch - * . Other authors are noted in the change history - * that follows (in reverse chronological order): - lpd 1999-04-12 added minor fixes from Pavel Roskin - for clean compilation with - gcc -W -Wall - lpd 1999-03-22 added hack to recognize lines consisting of - identifier1(identifier2, xxx) as *not* being procedures - lpd 1999-02-03 made indentation of preprocessor commands consistent - lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an - endless loop; quoted strings within an argument list - confused the parser - lpd 1999-01-24 added a check for write errors on the output, - suggested by Jim Meyering - lpd 1998-11-09 added further hack to recognize identifier(void) - as being a procedure - lpd 1998-10-23 added hack to recognize lines consisting of - identifier1(identifier2) as *not* being procedures - lpd 1997-12-08 made input_file optional; only closes input and/or - output file if not stdin or stdout respectively; prints - usage message on stderr rather than stdout; adds - --filename switch (changes suggested by - ) - lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with - compilers that don't understand void, as suggested by - Tom Lane - lpd 1996-01-15 changed to require that the first non-comment token - on the line following a function header be a left brace, - to reduce sensitivity to macros, as suggested by Tom Lane - - lpd 1995-06-22 removed #ifndefs whose sole purpose was to define - undefined preprocessor symbols as 0; changed all #ifdefs - for configuration symbols to #ifs - lpd 1995-04-05 changed copyright notice to make it clear that - including ansi2knr in a program does not bring the entire - program under the GPL - lpd 1994-12-18 added conditionals for systems where ctype macros - don't handle 8-bit characters properly, suggested by - Francois Pinard ; - removed --varargs switch (this is now the default) - lpd 1994-10-10 removed CONFIG_BROKETS conditional - lpd 1994-07-16 added some conditionals to help GNU `configure', - suggested by Francois Pinard ; - properly erase prototype args in function parameters, - contributed by Jim Avera ; - correct error in writeblanks (it shouldn't erase EOLs) - lpd 1989-xx-xx original version - */ - -/* Most of the conditionals here are to make ansi2knr work with */ -/* or without the GNU configure machinery. */ - -#if HAVE_CONFIG_H -# include -#endif - -#include -#include - -#if HAVE_CONFIG_H - -/* - For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). - This will define HAVE_CONFIG_H and so, activate the following lines. - */ - -# if STDC_HEADERS || HAVE_STRING_H -# include -# else -# include -# endif - -#else /* not HAVE_CONFIG_H */ - -/* Otherwise do it the hard way */ - -# ifdef BSD -# include -# else -# ifdef VMS - extern int strlen(), strncmp(); -# else -# include -# endif -# endif - -#endif /* not HAVE_CONFIG_H */ - -#if STDC_HEADERS -# include -#else -/* - malloc and free should be declared in stdlib.h, - but if you've got a K&R compiler, they probably aren't. - */ -# ifdef MSDOS -# include -# else -# ifdef VMS - extern char *malloc(); - extern void free(); -# else - extern char *malloc(); - extern int free(); -# endif -# endif - -#endif - -/* Define NULL (for *very* old compilers). */ -#ifndef NULL -# define NULL (0) -#endif - -/* - * The ctype macros don't always handle 8-bit characters correctly. - * Compensate for this here. - */ -#ifdef isascii -# undef HAVE_ISASCII /* just in case */ -# define HAVE_ISASCII 1 -#else -#endif -#if STDC_HEADERS || !HAVE_ISASCII -# define is_ascii(c) 1 -#else -# define is_ascii(c) isascii(c) -#endif - -#define is_space(c) (is_ascii(c) && isspace(c)) -#define is_alpha(c) (is_ascii(c) && isalpha(c)) -#define is_alnum(c) (is_ascii(c) && isalnum(c)) - -/* Scanning macros */ -#define isidchar(ch) (is_alnum(ch) || (ch) == '_') -#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') - -/* Forward references */ -char *skipspace(); -char *scanstring(); -int writeblanks(); -int test1(); -int convert1(); - -/* The main program */ -int -main(argc, argv) - int argc; - char *argv[]; -{ FILE *in = stdin; - FILE *out = stdout; - char *filename = 0; - char *program_name = argv[0]; - char *output_name = 0; -#define bufsize 5000 /* arbitrary size */ - char *buf; - char *line; - char *more; - char *usage = - "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; - /* - * In previous versions, ansi2knr recognized a --varargs switch. - * If this switch was supplied, ansi2knr would attempt to convert - * a ... argument to va_alist and va_dcl; if this switch was not - * supplied, ansi2knr would simply drop any such arguments. - * Now, ansi2knr always does this conversion, and we only - * check for this switch for backward compatibility. - */ - int convert_varargs = 1; - int output_error; - - while ( argc > 1 && argv[1][0] == '-' ) { - if ( !strcmp(argv[1], "--varargs") ) { - convert_varargs = 1; - argc--; - argv++; - continue; - } - if ( !strcmp(argv[1], "--filename") && argc > 2 ) { - filename = argv[2]; - argc -= 2; - argv += 2; - continue; - } - fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, - argv[1]); - fprintf(stderr, usage); - exit(1); - } - switch ( argc ) - { - default: - fprintf(stderr, usage); - exit(0); - case 3: - output_name = argv[2]; - out = fopen(output_name, "w"); - if ( out == NULL ) { - fprintf(stderr, "%s: Cannot open output file %s\n", - program_name, output_name); - exit(1); - } - /* falls through */ - case 2: - in = fopen(argv[1], "r"); - if ( in == NULL ) { - fprintf(stderr, "%s: Cannot open input file %s\n", - program_name, argv[1]); - exit(1); - } - if ( filename == 0 ) - filename = argv[1]; - /* falls through */ - case 1: - break; - } - if ( filename ) - fprintf(out, "#line 1 \"%s\"\n", filename); - buf = malloc(bufsize); - if ( buf == NULL ) - { - fprintf(stderr, "Unable to allocate read buffer!\n"); - exit(1); - } - line = buf; - while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) - { -test: line += strlen(line); - switch ( test1(buf) ) - { - case 2: /* a function header */ - convert1(buf, out, 1, convert_varargs); - break; - case 1: /* a function */ - /* Check for a { at the start of the next line. */ - more = ++line; -f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ - goto wl; - if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) - goto wl; - switch ( *skipspace(more, 1) ) - { - case '{': - /* Definitely a function header. */ - convert1(buf, out, 0, convert_varargs); - fputs(more, out); - break; - case 0: - /* The next line was blank or a comment: */ - /* keep scanning for a non-comment. */ - line += strlen(line); - goto f; - default: - /* buf isn't a function header, but */ - /* more might be. */ - fputs(buf, out); - strcpy(buf, more); - line = buf; - goto test; - } - break; - case -1: /* maybe the start of a function */ - if ( line != buf + (bufsize - 1) ) /* overflow check */ - continue; - /* falls through */ - default: /* not a function */ -wl: fputs(buf, out); - break; - } - line = buf; - } - if ( line != buf ) - fputs(buf, out); - free(buf); - if ( output_name ) { - output_error = ferror(out); - output_error |= fclose(out); - } else { /* out == stdout */ - fflush(out); - output_error = ferror(out); - } - if ( output_error ) { - fprintf(stderr, "%s: error writing to %s\n", program_name, - (output_name ? output_name : "stdout")); - exit(1); - } - if ( in != stdin ) - fclose(in); - return 0; -} - -/* Skip over whitespace and comments, in either direction. */ -char * -skipspace(p, dir) - register char *p; - register int dir; /* 1 for forward, -1 for backward */ -{ for ( ; ; ) - { while ( is_space(*p) ) - p += dir; - if ( !(*p == '/' && p[dir] == '*') ) - break; - p += dir; p += dir; - while ( !(*p == '*' && p[dir] == '/') ) - { if ( *p == 0 ) - return p; /* multi-line comment?? */ - p += dir; - } - p += dir; p += dir; - } - return p; -} - -/* Scan over a quoted string, in either direction. */ -char * -scanstring(p, dir) - register char *p; - register int dir; -{ - for (p += dir; ; p += dir) - if (*p == '"' && p[-dir] != '\\') - return p + dir; -} - -/* - * Write blanks over part of a string. - * Don't overwrite end-of-line characters. - */ -int -writeblanks(start, end) - char *start; - char *end; -{ char *p; - for ( p = start; p < end; p++ ) - if ( *p != '\r' && *p != '\n' ) - *p = ' '; - return 0; -} - -/* - * Test whether the string in buf is a function definition. - * The string may contain and/or end with a newline. - * Return as follows: - * 0 - definitely not a function definition; - * 1 - definitely a function definition; - * 2 - definitely a function prototype (NOT USED); - * -1 - may be the beginning of a function definition, - * append another line and look again. - * The reason we don't attempt to convert function prototypes is that - * Ghostscript's declaration-generating macros look too much like - * prototypes, and confuse the algorithms. - */ -int -test1(buf) - char *buf; -{ register char *p = buf; - char *bend; - char *endfn; - int contin; - - if ( !isidfirstchar(*p) ) - return 0; /* no name at left margin */ - bend = skipspace(buf + strlen(buf) - 1, -1); - switch ( *bend ) - { - case ';': contin = 0 /*2*/; break; - case ')': contin = 1; break; - case '{': return 0; /* not a function */ - case '}': return 0; /* not a function */ - default: contin = -1; - } - while ( isidchar(*p) ) - p++; - endfn = p; - p = skipspace(p, 1); - if ( *p++ != '(' ) - return 0; /* not a function */ - p = skipspace(p, 1); - if ( *p == ')' ) - return 0; /* no parameters */ - /* Check that the apparent function name isn't a keyword. */ - /* We only need to check for keywords that could be followed */ - /* by a left parenthesis (which, unfortunately, is most of them). */ - { static char *words[] = - { "asm", "auto", "case", "char", "const", "double", - "extern", "float", "for", "if", "int", "long", - "register", "return", "short", "signed", "sizeof", - "static", "switch", "typedef", "unsigned", - "void", "volatile", "while", 0 - }; - char **key = words; - char *kp; - unsigned len = endfn - buf; - - while ( (kp = *key) != 0 ) - { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) - return 0; /* name is a keyword */ - key++; - } - } - { - char *id = p; - int len; - /* - * Check for identifier1(identifier2) and not - * identifier1(void), or identifier1(identifier2, xxxx). - */ - - while ( isidchar(*p) ) - p++; - len = p - id; - p = skipspace(p, 1); - if (*p == ',' || - (*p == ')' && (len != 4 || strncmp(id, "void", 4))) - ) - return 0; /* not a function */ - } - /* - * If the last significant character was a ), we need to count - * parentheses, because it might be part of a formal parameter - * that is a procedure. - */ - if (contin > 0) { - int level = 0; - - for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) - level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); - if (level > 0) - contin = -1; - } - return contin; -} - -/* Convert a recognized function definition or header to K&R syntax. */ -int -convert1(buf, out, header, convert_varargs) - char *buf; - FILE *out; - int header; /* Boolean */ - int convert_varargs; /* Boolean */ -{ char *endfn; - register char *p; - /* - * The breaks table contains pointers to the beginning and end - * of each argument. - */ - char **breaks; - unsigned num_breaks = 2; /* for testing */ - char **btop; - char **bp; - char **ap; - char *vararg = 0; - - /* Pre-ANSI implementations don't agree on whether strchr */ - /* is called strchr or index, so we open-code it here. */ - for ( endfn = buf; *(endfn++) != '('; ) - ; -top: p = endfn; - breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); - if ( breaks == NULL ) - { /* Couldn't allocate break table, give up */ - fprintf(stderr, "Unable to allocate break table!\n"); - fputs(buf, out); - return -1; - } - btop = breaks + num_breaks * 2 - 2; - bp = breaks; - /* Parse the argument list */ - do - { int level = 0; - char *lp = NULL; - char *rp = NULL; - char *end = NULL; - - if ( bp >= btop ) - { /* Filled up break table. */ - /* Allocate a bigger one and start over. */ - free((char *)breaks); - num_breaks <<= 1; - goto top; - } - *bp++ = p; - /* Find the end of the argument */ - for ( ; end == NULL; p++ ) - { switch(*p) - { - case ',': - if ( !level ) end = p; - break; - case '(': - if ( !level ) lp = p; - level++; - break; - case ')': - if ( --level < 0 ) end = p; - else rp = p; - break; - case '/': - if (p[1] == '*') - p = skipspace(p, 1) - 1; - break; - case '"': - p = scanstring(p, 1) - 1; - break; - default: - ; - } - } - /* Erase any embedded prototype parameters. */ - if ( lp && rp ) - writeblanks(lp + 1, rp); - p--; /* back up over terminator */ - /* Find the name being declared. */ - /* This is complicated because of procedure and */ - /* array modifiers. */ - for ( ; ; ) - { p = skipspace(p - 1, -1); - switch ( *p ) - { - case ']': /* skip array dimension(s) */ - case ')': /* skip procedure args OR name */ - { int level = 1; - while ( level ) - switch ( *--p ) - { - case ']': case ')': - level++; - break; - case '[': case '(': - level--; - break; - case '/': - if (p > buf && p[-1] == '*') - p = skipspace(p, -1) + 1; - break; - case '"': - p = scanstring(p, -1) + 1; - break; - default: ; - } - } - if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) - { /* We found the name being declared */ - while ( !isidfirstchar(*p) ) - p = skipspace(p, 1) + 1; - goto found; - } - break; - default: - goto found; - } - } -found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) - { if ( convert_varargs ) - { *bp++ = "va_alist"; - vararg = p-2; - } - else - { p++; - if ( bp == breaks + 1 ) /* sole argument */ - writeblanks(breaks[0], p); - else - writeblanks(bp[-1] - 1, p); - bp--; - } - } - else - { while ( isidchar(*p) ) p--; - *bp++ = p+1; - } - p = end; - } - while ( *p++ == ',' ); - *bp = p; - /* Make a special check for 'void' arglist */ - if ( bp == breaks+2 ) - { p = skipspace(breaks[0], 1); - if ( !strncmp(p, "void", 4) ) - { p = skipspace(p+4, 1); - if ( p == breaks[2] - 1 ) - { bp = breaks; /* yup, pretend arglist is empty */ - writeblanks(breaks[0], p + 1); - } - } - } - /* Put out the function name and left parenthesis. */ - p = buf; - while ( p != endfn ) putc(*p, out), p++; - /* Put out the declaration. */ - if ( header ) - { fputs(");", out); - for ( p = breaks[0]; *p; p++ ) - if ( *p == '\r' || *p == '\n' ) - putc(*p, out); - } - else - { for ( ap = breaks+1; ap < bp; ap += 2 ) - { p = *ap; - while ( isidchar(*p) ) - putc(*p, out), p++; - if ( ap < bp - 1 ) - fputs(", ", out); - } - fputs(") ", out); - /* Put out the argument declarations */ - for ( ap = breaks+2; ap <= bp; ap += 2 ) - (*ap)[-1] = ';'; - if ( vararg != 0 ) - { *vararg = 0; - fputs(breaks[0], out); /* any prior args */ - fputs("va_dcl", out); /* the final arg */ - fputs(bp[0], out); - } - else - fputs(breaks[0], out); - } - free((char *)breaks); - return 0; -} diff --git a/rts/gmp/assert.c b/rts/gmp/assert.c deleted file mode 100644 index 65eccfa..0000000 --- a/rts/gmp/assert.c +++ /dev/null @@ -1,52 +0,0 @@ -/* GMP assertion failure handler. */ - -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include -#include "gmp.h" -#include "gmp-impl.h" - - -int -#if __STDC__ -__gmp_assert_fail (const char *filename, int linenum, - const char *expr) -#else -__gmp_assert_fail (filename, linenum, expr) -char *filename; -int linenum; -char *expr; -#endif -{ - if (filename != NULL && filename[0] != '\0') - { - fprintf (stderr, "%s:", filename); - if (linenum != -1) - fprintf (stderr, "%d: ", linenum); - } - - fprintf (stderr, "GNU MP assertion failed: %s\n", expr); - abort(); - - /*NOTREACHED*/ - return 0; -} diff --git a/rts/gmp/compat.c b/rts/gmp/compat.c deleted file mode 100644 index ab7529f..0000000 --- a/rts/gmp/compat.c +++ /dev/null @@ -1,46 +0,0 @@ -/* Old function entrypoints retained for binary compatibility. */ - -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include -#include "gmp.h" -#include "gmp-impl.h" - - -/* mpn_divexact_by3 was a function in gmp 3.0, but as of gmp 3.1 it's a - macro calling mpn_divexact_by3c. */ -int -__MPN (divexact_by3) (mp_ptr dst, mp_srcptr src, mp_size_t size) -{ - mpn_divexact_by3 (dst, src, size); -} - - -/* mpn_divmod_1 was a function in gmp 3.0 and earlier, but marked obsolete - in gmp 2 and 3. As of gmp 3.1 it's a macro calling mpn_divrem_1. */ -int -__MPN (divmod_1) (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor) -{ - mpn_divmod_1 (dst, src, size, divisor); -} - - diff --git a/rts/gmp/config.guess b/rts/gmp/config.guess deleted file mode 100644 index 08018f4..0000000 --- a/rts/gmp/config.guess +++ /dev/null @@ -1,1373 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 -# Free Software Foundation, Inc. -# -# 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# Written by Per Bothner . -# Please send patches to . -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# - - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) -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 - -dummy=dummy-$$ -trap 'rm -f $dummy.c $dummy.o $dummy ${dummy}1.s ${dummy}2.c ; exit 1' 1 2 15 - -# Use $HOST_CC if defined. $CC may point to a cross-compiler -if test x"$CC_FOR_BUILD" = x; then - if test x"$HOST_CC" != x; then - CC_FOR_BUILD="$HOST_CC" - else - if test x"$CC" != x; then - CC_FOR_BUILD="$CC" - else - echo 'dummy(){}' >$dummy.c - for c in cc c89 gcc; do - ($c $dummy.c -c) >/dev/null 2>&1 - if test $? = 0; then - CC_FOR_BUILD="$c"; break - fi - done - rm -f $dummy.c $dummy.o - if test x"$CC_FOR_BUILD" = x; then - CC_FOR_BUILD=no_compiler_found - fi - fi - fi -fi - - -# First make a best effort at recognizing x86 CPU type and leave it in X86CPU. -# If we fail, set X86CPU to UNAME_MACHINE -# -# DJGPP v2 (or 2.03 at least) always gives "pc" for uname -m, and the -# OEM for uname -s. Eg. pc:MS-DOS:6:2 on MS-DOS 6.21. The list of -# possible OEMs is in src/libc/dos/dos/getdos_v.c of djlsr203.zip, but -# just pc:*:*:* seems ok. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - i?86:*:*:* | i86pc:*:*:* | pc:*:*:*) - case "${UNAME_MACHINE}" in - i86pc | pc) UNAME_MACHINE=i386 ;; - esac - cat <${dummy}1.s - .globl cpuid - .globl _cpuid -cpuid: -_cpuid: - pushl %esi - pushl %ebx - movl 16(%esp),%eax - .byte 0x0f - .byte 0xa2 - movl 12(%esp),%esi - movl %ebx,(%esi) - movl %edx,4(%esi) - movl %ecx,8(%esi) - popl %ebx - popl %esi - ret -EOF - cat <${dummy}2.c -main () -{ - char vendor_string[13]; - char dummy_string[12]; - long fms; - int family, model; - char *modelstr; - - cpuid (vendor_string, 0); - vendor_string[12] = 0; - - fms = cpuid (dummy_string, 1); - - family = (fms >> 8) & 15; - model = (fms >> 4) & 15; - - modelstr = "i486"; - 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 - modelstr = "pentium3"; - 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"; - break; - case 6: - modelstr = "athlon"; - break; - } - } - else if (strcmp (vendor_string, "CyrixInstead") == 0) - { - /* Should recognize Cyrix' processors too. */ - } - - printf ("%s\n", modelstr); - return 0; -} -EOF - $CC_FOR_BUILD ${dummy}1.s ${dummy}2.c -o $dummy >/dev/null 2>&1 - if test "$?" = 0 ; then - X86CPU=`./$dummy` - fi - - - # Default to believing uname -m if the program fails to compile or - # run. Will fail to run on 386 since cpuid was only added on 486. - if test -z "$X86CPU" - then - X86CPU="$UNAME_MACHINE" - fi - rm -f ${dummy}1.s ${dummy}2.c $dummy - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi - # 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. - cat <$dummy.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 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - alpha:NetBSD:*:* | alpha:FreeBSD:*:*) - cat <$dummy.s - .globl main - .ent main -main: - .frame \$30,0,\$26,0 - .prologue 0 - .long 0x47e03d80 # implver $0 - lda \$2,259 - .long 0x47e20c21 # amask $2,$1 - srl \$1,8,\$2 - sll \$2,2,\$2 - sll \$0,3,\$0 - addl \$1,\$0,\$0 - addl \$2,\$0,\$0 - ret \$31,(\$26),1 - .end main -EOF - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy - case "$?" in - 7) - UNAME_MACHINE="alpha" - ;; - 15) - UNAME_MACHINE="alphaev5" - ;; - 14) - UNAME_MACHINE="alphaev56" - ;; - 10) - UNAME_MACHINE="alphapca56" - ;; - 16) - UNAME_MACHINE="alphaev6" - ;; - esac - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM}${UNAME_RELEASE} | sed -e 's/^[VTX]//' -e 's/[-(].*//' | tr [[A-Z]] [[a-z]]` - exit 0 ;; - 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 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 - exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - arc64:OpenBSD:*:*) - echo mips64el-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - arc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hkmips:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - pmax:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - wgrisc:OpenBSD:*:*) - echo mipsel-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - arm32:NetBSD:*:*) - echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - SR2?01:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - 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 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4[md]:SunOS:5.*:*) - echo sparcv8-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4u:SunOS:5.*:*) - echo sparcv9-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i386:SunOS:5.*:*) - echo ${X86CPU}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4[md]: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 sparcv8-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - 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 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(head -1 /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 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - # 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 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:NetBSD:*:*) - echo powerpc-apple-netbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* 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 $dummy.c -o $dummy \ - && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - 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 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo rs6000-ibm-aix3.2.5 - 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 0 ;; - *:AIX:*:4) - sed 's/^ //' << EOF >$dummy.c - #include - #include - main () - { - if (_system_configuration.architecture == POWER_RS - || _system_configuration.implementation == POWER_601) - puts ("power"); - else - { - if (_system_configuration.width == 64) - puts ("powerpc64"); - else - puts ("powerpc"); - } - exit (0); - } -EOF - $CC_FOR_BUILD $dummy.c -o $dummy - IBM_ARCH=`./$dummy` - rm -f $dummy.c $dummy - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=4.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - 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 $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` - rm -f $dummy.c $dummy - esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >$dummy.c - #include - 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 $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i?86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - hppa*:OpenBSD:*:*) - echo hppa-unknown-openbsd - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3D:*:*:*) - echo alpha-cray-unicos - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${X86CPU}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - i386:FreeBSD:*:*) - echo ${X86CPU}-pc-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - i386:NetBSD:*:*) - echo ${X86CPU}-pc-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i386:OpenBSD:*:*) - echo ${X86CPU}-pc-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${X86CPU}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - 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 i386-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) - - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - ld_help_string=`cd /; ld --help 2>&1` - ld_supported_emulations=`echo $ld_help_string \ - | sed -ne '/supported emulations:/!d - s/[ ][ ]*/ /g - s/.*supported emulations: *// - s/ .*// - p'` - case "$ld_supported_emulations" in - *ia64) - echo "${UNAME_MACHINE}-unknown-linux" - exit 0 - ;; - i?86linux) - echo "${X86CPU}-pc-linux-gnuaout" - exit 0 - ;; - i?86coff) - echo "${X86CPU}-pc-linux-gnucoff" - exit 0 - ;; - sparclinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - armlinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - elf32arm*) - echo "${UNAME_MACHINE}-unknown-linux-gnuoldld" - exit 0 - ;; - armelf_linux*) - echo "${UNAME_MACHINE}-unknown-linux-gnu" - exit 0 - ;; - m68klinux) - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" - exit 0 - ;; - elf32ppc | elf32ppclinux) - # Determine Lib Version - cat >$dummy.c < -#if defined(__GLIBC__) -extern char __libc_version[]; -extern char __libc_release[]; -#endif -main(argc, argv) - int argc; - char *argv[]; -{ -#if defined(__GLIBC__) - printf("%s %s\n", __libc_version, __libc_release); -#else - printf("unkown\n"); -#endif - return 0; -} -EOF - LIBC="" - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null - if test "$?" = 0 ; then - ./$dummy | grep 1\.99 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.c $dummy - echo powerpc-unknown-linux-gnu${LIBC} - exit 0 - ;; - esac - - if test "${UNAME_MACHINE}" = "alpha" ; then - cat <$dummy.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 0x47e03d80 # implver \$0 - lda \$2,-1 - .long 0x47e20c21 # amask \$2,\$1 - lda \$16,\$Lformat - mov \$0,\$17 - not \$1,\$18 - jsr \$26,printf - ldgp \$29,0(\$26) - mov 0,\$16 - jsr \$26,exit - .end main -EOF - LIBC="" - $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null - if test "$?" = 0 ; then - case `./$dummy` in - 0-0) - UNAME_MACHINE="alpha" - ;; - 1-0) - UNAME_MACHINE="alphaev5" - ;; - 1-1) - UNAME_MACHINE="alphaev56" - ;; - 1-101) - UNAME_MACHINE="alphapca56" - ;; - 2-303) - UNAME_MACHINE="alphaev6" - ;; - 2-307) - UNAME_MACHINE="alphaev67" - ;; - esac - - objdump --private-headers $dummy | \ - grep ld.so.1 > /dev/null - if test "$?" = 0 ; then - LIBC="libc1" - fi - fi - rm -f $dummy.s $dummy - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 - elif test "${UNAME_MACHINE}" = "mips" ; then - cat >$dummy.c < /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __MIPSEB__ - printf ("%s-unknown-linux-gnu\n", argv[1]); -#endif -#ifdef __MIPSEL__ - printf ("%sel-unknown-linux-gnu\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - elif test "${UNAME_MACHINE}" = "s390"; then - echo s390-ibm-linux && exit 0 - else - # Either a pre-BFD a.out linker (linux-gnuoldld) - # or one that does not give us useful --help. - # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. - # If ld does not provide *any* "supported emulations:" - # that means it is gnuoldld. - echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" - test $? != 0 && echo "${X86CPU}-pc-linux-gnuoldld" && exit 0 - - case "${UNAME_MACHINE}" in - i?86) - VENDOR=pc; - UNAME_MACHINE=${X86CPU} - ;; - *) - VENDOR=unknown; - ;; - esac - # Determine whether the default compiler is a.out or elf - cat >$dummy.c < -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif -#ifdef __ELF__ -# ifdef __GLIBC__ -# if __GLIBC__ >= 2 - printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -# else - printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); -# endif -#else - printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); -#endif - return 0; -} -EOF - $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 - rm -f $dummy.c $dummy - fi ;; -# 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. - i?86:DYNIX/ptx:4*:*) - echo i386-sequent-sysv4 - exit 0 ;; - 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 ${X86CPU}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - 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 ${X86CPU}-univel-sysv${UNAME_REL} - else - echo ${X86CPU}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i?86:*:5:7*) - # Fixed at (any) Pentium or better - UNAME_MACHINE=i586 - if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then - echo ${X86CPU}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION} - else - echo ${X86CPU}-pc-sysv${UNAME_RELEASE} - fi - exit 0 ;; - i?86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${X86CPU}-pc-sco$UNAME_REL - else - echo ${X86CPU}-pc-sysv32 - fi - exit 0 ;; - i?86:*DOS:*:*) - echo ${X86CPU}-pc-msdosdjgpp - exit 0 ;; - 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 i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - 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 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*: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 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *: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 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:*:6*) - echo mips-sony-newsos6 - exit 0 ;; - 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 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - Power*:Mac*OS:*:*) - echo powerpc-apple-macos${UNAME_RELEASE} - exit 0 ;; - *:Mac*OS:*:*) - echo ${UNAME_MACHINE}-apple-macos${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - echo `uname -p`-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - if test "${UNAME_MACHINE}" = "x86pc"; then - UNAME_MACHINE=pc - fi - echo `uname -p`-${UNAME_MACHINE}-nto-qnx - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-W:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 -rm -f $dummy.c $dummy - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -#echo '(Unable to guess system type)' 1>&2 - -exit 1 diff --git a/rts/gmp/config.in b/rts/gmp/config.in deleted file mode 100644 index 8b2546e..0000000 --- a/rts/gmp/config.in +++ /dev/null @@ -1,162 +0,0 @@ -/* config.in. Generated automatically from configure.in by autoheader. */ -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - - -/* Define if a limb is long long. */ -#undef _LONG_LONG_LIMB - -/* Define if we have native implementation of function. */ -#undef HAVE_NATIVE_ -#undef HAVE_NATIVE_mpn_add -#undef HAVE_NATIVE_mpn_add_1 -#undef HAVE_NATIVE_mpn_add_n -#undef HAVE_NATIVE_mpn_add_nc -#undef HAVE_NATIVE_mpn_addmul_1 -#undef HAVE_NATIVE_mpn_addmul_1c -#undef HAVE_NATIVE_mpn_addsub_n -#undef HAVE_NATIVE_mpn_addsub_nc -#undef HAVE_NATIVE_mpn_and_n -#undef HAVE_NATIVE_mpn_andn_n -#undef HAVE_NATIVE_mpn_bdivmod -#undef HAVE_NATIVE_mpn_cmp -#undef HAVE_NATIVE_mpn_com_n -#undef HAVE_NATIVE_mpn_copyd -#undef HAVE_NATIVE_mpn_copyi -#undef HAVE_NATIVE_mpn_divexact_by3c -#undef HAVE_NATIVE_mpn_divrem -#undef HAVE_NATIVE_mpn_divrem_1 -#undef HAVE_NATIVE_mpn_divrem_1c -#undef HAVE_NATIVE_mpn_divrem_2 -#undef HAVE_NATIVE_mpn_divrem_newton -#undef HAVE_NATIVE_mpn_divrem_classic -#undef HAVE_NATIVE_mpn_dump -#undef HAVE_NATIVE_mpn_gcd -#undef HAVE_NATIVE_mpn_gcd_1 -#undef HAVE_NATIVE_mpn_gcdext -#undef HAVE_NATIVE_mpn_get_str -#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_mod_1 -#undef HAVE_NATIVE_mpn_mod_1c -#undef HAVE_NATIVE_mpn_mul -#undef HAVE_NATIVE_mpn_mul_1 -#undef HAVE_NATIVE_mpn_mul_1c -#undef HAVE_NATIVE_mpn_mul_basecase -#undef HAVE_NATIVE_mpn_mul_n -#undef HAVE_NATIVE_mpn_nand_n -#undef HAVE_NATIVE_mpn_nior_n -#undef HAVE_NATIVE_mpn_perfect_square_p -#undef HAVE_NATIVE_mpn_popcount -#undef HAVE_NATIVE_mpn_preinv_mod_1 -#undef HAVE_NATIVE_mpn_random2 -#undef HAVE_NATIVE_mpn_random -#undef HAVE_NATIVE_mpn_rawrandom -#undef HAVE_NATIVE_mpn_rshift -#undef HAVE_NATIVE_mpn_scan0 -#undef HAVE_NATIVE_mpn_scan1 -#undef HAVE_NATIVE_mpn_set_str -#undef HAVE_NATIVE_mpn_sqrtrem -#undef HAVE_NATIVE_mpn_sqr_basecase -#undef HAVE_NATIVE_mpn_sub -#undef HAVE_NATIVE_mpn_sub_1 -#undef HAVE_NATIVE_mpn_sub_n -#undef HAVE_NATIVE_mpn_sub_nc -#undef HAVE_NATIVE_mpn_submul_1 -#undef HAVE_NATIVE_mpn_submul_1c -#undef HAVE_NATIVE_mpn_udiv_w_sdiv -#undef HAVE_NATIVE_mpn_umul_ppmm -#undef HAVE_NATIVE_mpn_udiv_qrnnd -#undef HAVE_NATIVE_mpn_xor_n -#undef HAVE_NATIVE_mpn_xnor_n - -/* Define to 1 if you have the declaration of `optarg', and to 0 if you don't. - */ -#undef HAVE_DECL_OPTARG - -/* ./configure --enable-assert option, to enable some ASSERT()s */ -#undef WANT_ASSERT - -/* Define if you have the header file. */ -#undef HAVE_SYS_SYSCTL_H - -/* Define if you have the `strtoul' function. */ -#undef HAVE_STRTOUL - -/* Name of package */ -#undef PACKAGE - -/* Define if you have the `sysctlbyname' function. */ -#undef HAVE_SYSCTLBYNAME - -/* Define if the system has the type `void'. */ -#undef HAVE_VOID - -/* Define if you have the `popen' function. */ -#undef HAVE_POPEN - -/* ./configure --disable-alloca option, to use stack-alloc.c, not alloca */ -#undef USE_STACK_ALLOC - -/* Define if cpp supports the ANSI # stringizing operator. */ -#undef HAVE_STRINGIZE - -/* Define if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define if you have the `sysconf' function. */ -#undef HAVE_SYSCONF - -/* Define if you have the `getpagesize' function. */ -#undef HAVE_GETPAGESIZE - -/* Define if you have the `processor_info' function. */ -#undef HAVE_PROCESSOR_INFO - -/* Version number of package */ -#undef VERSION - -/* Define if you have the `getopt_long' function. */ -#undef HAVE_GETOPT_LONG - -/* Define if you have the header file. */ -#undef HAVE_GETOPT_H - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if a speed_cyclecounter exists (for the tune programs) */ -#undef HAVE_SPEED_CYCLECOUNTER - -/* Define if mpn/tests has calling conventions checking for the CPU */ -#undef HAVE_CALLING_CONVENTIONS - -/* ./configure --enable-fft option, to enable FFTs for multiplication */ -#undef WANT_FFT - -/* Define if you have the header file. */ -#undef HAVE_STRING_H - -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H diff --git a/rts/gmp/config.sub b/rts/gmp/config.sub deleted file mode 100644 index c4123f2..0000000 --- a/rts/gmp/config.sub +++ /dev/null @@ -1,1273 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script, version 1.1. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 -# Free Software Foundation, Inc. -# -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# 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 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., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# 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. - -# Written by Per Bothner . -# Please send patches to . -# -# 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. - -# 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. - -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi - -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; -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*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - 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) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -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/'` - ;; - -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*) - 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. - tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ - | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ - | 580 | i960 | h8300 \ - | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \ - | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ - | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ - | alphaev6[78] \ - | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ - | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ - | mips64orion | mips64orionel | mipstx39 | mipstx39el \ - | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ - | mips64vr5000 | miprs64vr5000el | mcore \ - | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ - | powerpc64 | sparcv8 | supersparc | microsparc | ultrasparc \ - | thumb | d10v | fr30 | avr) - basic_machine=$basic_machine-unknown - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl) - ;; - - # 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[34567]86 | pentium[23] | k[56] | k6[23] | athlon) - 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. - vax-* | tahoe-* | i[34567]86-* | pentium[23]-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ - | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ - | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ - | xmp-* | ymp-* \ - | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ - | alphaev6[78]-* \ - | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ - | clipper-* | orion-* \ - | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ - | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ - | mipstx39-* | mipstx39el-* | mcore-* \ - | f301-* | armv*-* | s390-* | sv1-* | t3e-* \ - | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ - | k[56]-* | k6[23]-* | athlon-* | powerpc64-* \ - | sparcv8-* | supersparc-* | microsparc-* | ultrasparc-* \ - | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* ) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 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 - ;; - 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 - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-cbm - ;; - amigaos | amigados) - basic_machine=m68k-cbm - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-cbm - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - 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 | ymp) - basic_machine=ymp-cray - os=-unicos - ;; - cray2) - basic_machine=cray2-cray - os=-unicos - ;; - [ctj]90-cray) - basic_machine=c90-cray - os=-unicos - ;; - crds | unos) - basic_machine=m68k-crds - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - 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 - ;; - 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]) - basic_machine=hppa2.0-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - basic_machine=hppa2.0-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'm not sure what "Sysv32" means. Should this be sysv3.2? - i[34567]86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i[34567]86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i[34567]86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i[34567]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 - ;; - i386-go32 | go32) - basic_machine=i386-unknown - os=-go32 - ;; - i386-mingw32 | mingw32) - basic_machine=i386-unknown - os=-mingw32 - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - macppc*) - basic_machine=powerpc-apple - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mipsel*-linux*) - basic_machine=mipsel-unknown - os=-linux-gnu - ;; - mips*-linux*) - basic_machine=mips-unknown - os=-linux-gnu - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - mmix*) - basic_machine=mmix-knuth - os=-mmixware - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - msdos) - basic_machine=i386-unknown - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - 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 - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - 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 - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentiummmx | p55) - basic_machine=pentiummmx-pc - ;; - pentium | p5 | i586) - basic_machine=pentium-pc - ;; - pentiumpro | p6) - basic_machine=pentiumpro-pc - ;; - pentiummmx-* | p55-*) - basic_machine=pentiummmx-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium-* | p5-* | i586-*) - basic_machine=pentium-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-*) - basic_machine=pentiumpro-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - nexen) - # We don't have specific support for Nexgen yet, so just call it a Pentium - basic_machine=i586-nexgen - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=rs6000-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) - basic_machine=powerpc64-`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/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sparclite-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 - ;; - 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=t3e-cray - os=-unicos - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - 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 - ;; - xmp) - basic_machine=xmp-cray - os=-unicos - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - z8k-*-coff) - basic_machine=z8k-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 - ;; - mips) - if [ x$os = x-linux-gnu ]; then - basic_machine=mips-unknown - else - basic_machine=mips-mips - fi - ;; - romp) - basic_machine=romp-ibm - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sparc | sparcv9) - 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 - ;; - c4x*) - basic_machine=c4x-none - os=-coff - ;; - *) - 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. - -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* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i[34567]86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto*) - os=-nto-qnx - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -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 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -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) - os=-mint - ;; - -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 - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-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 - ;; - f301-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 - ;; - -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 - ;; - -ptx*) - vendor=sequent - ;; - -vxsim* | -vxworks*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -*MiNT) - vendor=atari - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os diff --git a/rts/gmp/configure b/rts/gmp/configure deleted file mode 100644 index 8294680..0000000 --- a/rts/gmp/configure +++ /dev/null @@ -1,5216 +0,0 @@ -#! /bin/sh -# From configure.in Revision: 1.129.2.2 -# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using Autoconf version 2.14a. -# Copyright (C) 1992, 93, 94, 95, 96, 98, 99, 2000 -# Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_default_prefix=/usr/local -# Any additions from configure.in: - -# Initialize some variables set by options. -ac_init_help=false -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -: ${ac_max_here_lines=48} -# Sed expression to map a string onto a valid sh and CPP variable names. -ac_tr_sh='sed -e y%*+%pp%;s%[^a-zA-Z0-9_]%_%g' -ac_tr_cpp='sed -e y%*abcdefghijklmnopqrstuvwxyz%PABCDEFGHIJKLMNOPQRSTUVWXYZ%;s%[^A-Z0-9_]%_%g' - -ac_prev= -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 - - ac_optarg=`echo "$ac_option" | sed -n 's/^[^=]*=//p'` - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -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 ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$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" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo "$ac_option"|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. - if echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1; then - { echo "configure: error: invalid feature: $ac_feature" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo "$ac_option"|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1; then - { echo "configure: error: invalid feature: $ac_feature" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$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=: ;; - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$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" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - 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) - 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" ;; - - -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 ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`echo "$ac_option"|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if echo "$ac_package" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1; then - { echo "configure: error: invalid package: $ac_package" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo "$ac_option"|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. - if echo "$ac_package" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1; then - { echo "configure: error: invalid package: $ac_package" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=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" ;; - - -*) { echo "configure: error: unrecognized option: $ac_option -Try \`configure --help' for more information." 1>&2; exit 1; } - ;; - - *=*) - ac_envvar=`echo "$ac_option" | sed -e 's/=.*//'` - # Reject names that are not valid shell variable names. - if echo "$ac_envvar" | grep '[^a-zA-Z0-9_]' >/dev/null 2>&1; then - { echo "configure: error: invalid variable name: $ac_envvar" 1>&2; exit 1; } - fi - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - if echo "$ac_option" | grep '[^-a-zA-Z0-9.]' >/dev/null 2>&1; then - echo "configure: warning: invalid host type: $ac_option" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --\`echo $ac_prev | sed 's/_/-/g'\`" 1>&2; exit 1; } -fi -if $ac_init_help; 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 <<\EOF -`configure' configures software source code packages to adapt to many kinds -of systems. - -Usage: configure [OPTION]... [VAR=VALUE]... [HOST] - -To safely assign special values to environment variables (e.g., CC, -CFLAGS...), give to `configure' the definition as VAR=VALUE. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help print this message - -V, --version print the version of autoconf that created configure - -q, --quiet, --silent do not print `checking...' messages - --cache-file=FILE cache test results in FILE - -n, --no-create do not create output files - -EOF - - cat <\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by configure version 2.14a, executed with - > $0 $ac_configure_args -" 1>&5 - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file= - -# 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 its parent. - ac_prog=$0 - ac_confdir=`echo "$ac_prog" | sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - 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 - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: cannot find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: cannot find sources in $srcdir" 1>&2; exit 1; } - fi -fi -srcdir=`echo "$srcdir" | sed 's%\([^/]\)/*$%\1%'` - -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - echo "loading cache $cache_file" - test -f "$cache_file" && . $cache_file -else - echo "creating cache $cache_file" - >$cache_file -fi - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -ac_exeext= -ac_objext=o -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#include -#if STDC_HEADERS -# include -# include -#else -# if HAVE_STDLIB_H -# include -# endif -#endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H -# include -# endif -# include -#else -# if HAVE_STRINGS_H -# include -# endif -#endif -#if HAVE_INTTYPES_H -# include -#endif -#if HAVE_UNISTD_H -# include -#endif" - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says Kaveh R. Ghazi. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ECHO_N= ECHO_C=' -' ECHO_T=' ' - else - ECHO_N=-n ECHO_C= ECHO_T= - fi -else - ECHO_N= ECHO_C='\c' ECHO_T= -fi - -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 - { echo "configure: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - -echo $ECHO_N "checking host system type... $ECHO_C" 1>&6 -echo "configure:636: checking host system type" 1>&5 -if test "x$ac_cv_host" = "x" || (test "x$host" != "xNONE" && test "x$host" != "x$ac_cv_host_alias"); then - - # Make sure we can run config.sub. - if $ac_config_sub sun4 >/dev/null 2>&1; then :; else - { echo "configure: error: cannot run $ac_config_sub" 1>&2; exit 1; } - fi - - ac_cv_host_alias=$host - case "$ac_cv_host_alias" in - NONE) - case $nonopt in - NONE) - if ac_cv_host_alias=`$ac_config_guess`; then : - else { echo "configure: error: cannot guess host type; you must specify one" 1>&2; exit 1; } - fi ;; *) ac_cv_host_alias=$nonopt ;; - esac ;; - esac - - ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || exit 1 - ac_cv_host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - ac_cv_host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - ac_cv_host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -else - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -fi - -echo "$ECHO_T""$ac_cv_host" 1>&6 - -host=$ac_cv_host -host_alias=$ac_cv_host_alias -host_cpu=$ac_cv_host_cpu -host_vendor=$ac_cv_host_vendor -host_os=$ac_cv_host_os - -echo $ECHO_N "checking target system type... $ECHO_C" 1>&6 -echo "configure:672: checking target system type" 1>&5 -if test "x$ac_cv_target" = "x" || (test "x$target" != "xNONE" && test "x$target" != "x$ac_cv_target_alias"); then - - # Make sure we can run config.sub. - if $ac_config_sub sun4 >/dev/null 2>&1; then :; else - { echo "configure: error: cannot run $ac_config_sub" 1>&2; exit 1; } - fi - - ac_cv_target_alias=$target - case "$ac_cv_target_alias" in - NONE) - case $nonopt in - NONE) - ac_cv_target_alias=$host_alias ;; - *) ac_cv_target_alias=$nonopt ;; - esac ;; - esac - - ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || exit 1 - ac_cv_target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - ac_cv_target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - ac_cv_target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -else - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -fi - -echo "$ECHO_T""$ac_cv_target" 1>&6 - -target=$ac_cv_target -target_alias=$ac_cv_target_alias -target_cpu=$ac_cv_target_cpu -target_vendor=$ac_cv_target_vendor -target_os=$ac_cv_target_os - -echo $ECHO_N "checking build system type... $ECHO_C" 1>&6 -echo "configure:707: checking build system type" 1>&5 -if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then - - # Make sure we can run config.sub. - if $ac_config_sub sun4 >/dev/null 2>&1; then :; else - { echo "configure: error: cannot run $ac_config_sub" 1>&2; exit 1; } - fi - - ac_cv_build_alias=$build - case "$ac_cv_build_alias" in - NONE) - case $nonopt in - NONE) - ac_cv_build_alias=$host_alias ;; - *) ac_cv_build_alias=$nonopt ;; - esac ;; - esac - - ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || exit 1 - ac_cv_build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - ac_cv_build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - ac_cv_build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -else - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -fi - -echo "$ECHO_T""$ac_cv_build" 1>&6 - -build=$ac_cv_build -build_alias=$ac_cv_build_alias -build_cpu=$ac_cv_build_cpu -build_vendor=$ac_cv_build_vendor -build_os=$ac_cv_build_os - -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; -esac - -test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -# 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 -# 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" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" 1>&6 -echo "configure:778: checking for a BSD compatible install" 1>&5 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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 - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus $ac_dir/$ac_prog >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -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. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ECHO_T""$INSTALL" 1>&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' - -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" 1>&6 -echo "configure:835: checking whether build environment is sane" 1>&5 -# Just in case -sleep 1 -echo timestamp > conftestfile -# 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 ( - set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftestfile` - fi - if test "$*" != "X $srcdir/configure conftestfile" \ - && test "$*" != "X conftestfile $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". - { echo "configure: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" 1>&2; exit 1; } - fi - - test "$2" = conftestfile - ) -then - # Ok. - : -else - { echo "configure: error: newly created file is older than distributed files! -Check your system clock" 1>&2; exit 1; } -fi -rm -f conftest* -echo "$ECHO_T""yes" 1>&6 -if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF >conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF - program_transform_name=`echo $program_transform_name | sed -f conftestsed` - rm -f conftestsed -fi -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" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," - -test x"${MISSING+set}" = xset || \ - MISSING="\${SHELL} `CDPATH=: && cd $ac_aux_dir && pwd`/missing" -if eval "$MISSING --run :"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - am_backtick='`' - echo "configure: warning: ${am_backtick}missing' script is too old or missing" 1>&2 -fi - -for ac_prog in mawk gawk 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 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:906: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_AWK="$ac_prog" - break - done -fi -fi -AWK="$ac_cv_prog_AWK" -if test -n "$AWK"; then - echo "$ECHO_T""$AWK" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -test -n "$AWK" && break -done - -echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" 1>&6 -echo "configure:939: checking whether ${MAKE-make} sets \${MAKE}" 1>&5 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$ECHO_T""yes" 1>&6 - SET_MAKE= -else - echo "$ECHO_T""no" 1>&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" - -fi -if test "x$enable_dependency_tracking" = xno; then - AMDEP="#" -else - am_depcomp="$ac_aux_dir/depcomp" - if test ! -f "$am_depcomp"; then - AMDEP="#" - else - AMDEP= - fi -fi - -if test -z "$AMDEP"; then - AMDEPBACKSLASH='\' -else - AMDEPBACKSLASH= -fi - -if test -d .deps || mkdir .deps 2> /dev/null || test -d .deps; then - DEPDIR=.deps -else - DEPDIR=_deps -fi - -PACKAGE=gmp - -VERSION=3.1.1 - -if test "`CDPATH=: && cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } -fi -cat >>confdefs.h <>confdefs.h <&6 -echo "configure:1029: checking whether to enable maintainer-specific portions of Makefiles" 1>&5 - # Check whether --enable-maintainer-mode or --disable-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 - echo "$ECHO_T""$USE_MAINTAINER_MODE" 1>&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 - -gmp_configm4="config.m4" -gmp_tmpconfigm4=cnfm4.tmp -gmp_tmpconfigm4i=cnfm4i.tmp -gmp_tmpconfigm4p=cnfm4p.tmp -test -f $gmp_tmpconfigm4 && rm $gmp_tmpconfigm4 -test -f $gmp_tmpconfigm4i && rm $gmp_tmpconfigm4i -test -f $gmp_tmpconfigm4p && rm $gmp_tmpconfigm4p - -# Check whether --enable-assert or --disable-assert was given. -if test "${enable_assert+set}" = set; then - enableval="$enable_assert" - case "${enableval}" in -yes|no) ;; -*) { echo "configure: error: bad value ${enableval} for --enable-assert, need yes or no" 1>&2; exit 1; } ;; -esac -else - enable_assert=no -fi - -if test "$enable_assert" = "yes"; then - cat >>confdefs.h <<\EOF -#define WANT_ASSERT 1 -EOF - -fi - -# Check whether --enable-alloca or --disable-alloca was given. -if test "${enable_alloca+set}" = set; then - enableval="$enable_alloca" - case "${enableval}" in -yes|no) ;; -*) { echo "configure: error: bad value ${enableval} for --enable-alloca, need yes or no" 1>&2; exit 1; } ;; -esac -else - enable_alloca=yes -fi - -if test "$enable_alloca" = "no"; then - cat >>confdefs.h <<\EOF -#define USE_STACK_ALLOC 1 -EOF - -fi - -# Check whether --enable-fft or --disable-fft was given. -if test "${enable_fft+set}" = set; then - enableval="$enable_fft" - case "${enableval}" in -yes|no) ;; -*) { echo "configure: error: bad value ${enableval} for --enable-fft, need yes or no" 1>&2; exit 1; } ;; -esac -else - enable_fft=no -fi - -if test "$enable_fft" = "yes"; then - cat >>confdefs.h <<\EOF -#define WANT_FFT 1 -EOF - -fi - -# Check whether --enable-mpbsd or --disable-mpbsd was given. -if test "${enable_mpbsd+set}" = set; then - enableval="$enable_mpbsd" - case "${enableval}" in -yes|no) ;; -*) { echo "configure: error: bad value ${enableval} for --enable-mpbsd, need yes or no" 1>&2; exit 1; } ;; -esac -else - enable_mpbsd=no -fi - -if test "$enable_mpbsd" = "yes"; then - WANT_MPBSD_TRUE= - WANT_MPBSD_FALSE='#' -else - WANT_MPBSD_TRUE='#' - WANT_MPBSD_FALSE= -fi - -# Check whether --enable-mpfr or --disable-mpfr was given. -if test "${enable_mpfr+set}" = set; then - enableval="$enable_mpfr" - case "${enableval}" in -yes|no) ;; -*) { echo "configure: error: bad value ${enableval} for --enable-mpfr, need yes or no" 1>&2; exit 1; } ;; -esac -else - enable_mpfr=no -fi - -if test "$enable_mpfr" = "yes"; then - WANT_MPFR_TRUE= - WANT_MPFR_FALSE='#' -else - WANT_MPFR_TRUE='#' - WANT_MPFR_FALSE= -fi - -os_64bit="no" -cclist="gcc cc" # FIXME: Prefer c89 to cc. -gmp_cflags_gcc="-g -O2" -gmp_cflags64_gcc="-g -O2" -gmp_cflags_cc="-g" -gmp_cflags64_cc="-g" - -case "$target" in - # Alpha - alpha*-cray-unicos*) - # Don't perform any assembly syntax tests on this beast. - gmp_no_asm_syntax_testing=yes - cclist=cc - gmp_cflags_cc="$gmp_cflags_cc -O" - ;; - alpha*-*-osf*) - flavour=`echo $target_cpu | sed 's/^alpha//g'` - if test -n "$flavour"; then - case $flavour in # compilers don't seem to understand `ev67' and such. - ev6? | ev7*) flavour=ev6;; - esac - gmp_optcflags_gcc="-mcpu=$flavour" - # FIXME: We shouldn't fail fatally if none of these work, but that's - # how xoptcflags work and we don't have any other mechanism right now. - # Why do we need this here and not for alpha*-*-* below? - gmp_xoptcflags_gcc="-Wa,-arch,${flavour} -Wa,-m${flavour}" - gmp_optcflags_cc="-arch $flavour -tune $flavour" - fi - ;; - alpha*-*-*) - cclist="gcc" - flavour=`echo $target_cpu | sed 's/^alpha//g'` - if test -n "$flavour"; then - case $flavour in - ev6? | ev7*) flavour=ev6;; - esac - gmp_optcflags_gcc="-mcpu=$flavour" - fi - ;; - # Cray vector machines. This must come after alpha* so that we can - # recognize present and future vector processors with a wildcard. - *-cray-unicos*) - # Don't perform any assembly syntax tests on this beast. - gmp_no_asm_syntax_testing=yes - cclist=cc - # Don't inherit default gmp_cflags_cc value; it comes with -g which - # disables all optimization on Cray vector systems - gmp_cflags_cc="-O" - ;; - - # AMD and Intel x86 configurations - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*) - # Rumour has it -O2 used to give worse register allocation than just -O. - gmp_cflags_gcc="-g -O -fomit-frame-pointer" - - case "${target}" in - i386*-*-*) gmp_optcflags_gcc="-mcpu=i386 -march=i386";; - i486*-*-*) gmp_optcflags_gcc="-mcpu=i486 -march=i486";; - i586*-*-* | pentium-*-* | pentiummmx-*-*) - gmp_optcflags_gcc="-mcpu=pentium -march=pentium";; - - # -march=pentiumpro not used because mpz/powm.c (swox cvs rev 1.4) - # tickles a bug in gcc 2.95.2 (believed fixed in 2.96). - i686*-*-* | pentiumpro-*-* | pentium[23]-*-*) - gmp_optcflags_gcc="-mcpu=pentiumpro";; - - k6*-*-*) gmp_optcflags_gcc="-mcpu=k6 -march=k6";; - - # Athlon instruction costs are close to p6: 3 cycle load latency, 4-6 - # cycle mul, 40 cycle div, pairable adc, ... - # FIXME: Change this when gcc gets something specific for Athlon. - # -march=pentiumpro not used, per i686 above. - athlon-*-*) gmp_optcflags_gcc="-mcpu=pentiumpro";; - esac - ;; - - # Sparc - ultrasparc*-*-solaris2.[7-9] | sparcv9-*-solaris2.[7-9]) - os_64bit=yes - gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" - gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" - gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - gmp_cflags64_cc="-xtarget=native -xarch=v9 -xO4" - ;; - sparc64-*-linux*) - # Need to think more about the options passed here. This isn't good for - # some sparc64 linux distros, since we end up not optimizing when all the - # options below fail. - os_64bit=yes - gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" - gmp_cflags_gcc="$gmp_cflags_gcc -m32" - gmp_xoptflags_gcc="-mcpu=ultrasparc -mvis" - ;; - ultrasparc*-*-* | sparcv9-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" - gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - ;; - sparcv8*-*-solaris2.* | microsparc*-*-solaris2.*) - gmp_cflags_gcc="$gmp_cflags_gcc" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - ;; - sparcv8*-*-* | microsparc*-*-*) # SunOS, Linux, *BSD - cclist="gcc acc cc" - gmp_cflags_gcc="$gmp_cflags_gcc" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_acc="-g -O2 -cg92" - gmp_cflags_cc="-O2" # FIXME: Flag for v8? - ;; - supersparc*-*-solaris2.*) - gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4 -DSUPERSPARC" - ;; - supersparc*-*-*) # SunOS, Linux, *BSD - cclist="gcc acc cc" - gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_acc="-g -O2 -cg92 -DSUPERSPARC" - gmp_cflags_cc="-O2 -DSUPERSPARC" # FIXME: Flag for v8? - ;; - *sparc*-*-*) - cclist="gcc acc cc" - gmp_cflags_acc="-g -O2" - gmp_cflags_cc="-g -O2" - ;; - - # POWER/PowerPC - powerpc64-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -maix64 -mpowerpc64" - gmp_cflags_xlc="-g -O2 -q64 -qtune=pwr3" - ;; - powerpc*-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" - gmp_cflags_xlc="$gmp_cflags_cc -qarch=ppc -O2" - ;; - power-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -mpower" - gmp_cflags_xlc="$gmp_cflags_cc -qarch=pwr -O2" - ;; - powerpc64*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc64" - cat >>confdefs.h <<\EOF -#define _LONG_LONG_LIMB 1 -EOF - ;; - powerpc-apple-darwin* | powerpc-apple-macosx*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc -traditional-cpp" - ;; - powerpc*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" - ;; - - # MIPS - mips-sgi-irix6.*) - os_64bit=yes - gmp_cflags64_gcc="-g -O2 -mabi=n32" - gmp_cflags64_cc="$gmp_cflags64_cc -O2 -n32" - ;; - - # Motorola 68k family - m88110*-*-*) - gmp_cflags_gcc="-g -O -m88110" ;; - m68*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" - ;; - - # HP - hppa1.0*-*-*) - cclist="gcc c89 cc" - gmp_cflags_c89="$gmp_cflags_cc +O2" - gmp_cflags_cc="$gmp_cflags_cc +O2" - ;; - hppa2.0w*-*-*) - cclist="c89 cc" - gmp_cflags_c89="+DD64 +O3" - gmp_cflags_cc="+DD64 +O3" - ;; - hppa2.0*-*-*) - os_64bit=yes - cclist="gcc c89 cc" - gmp_cflags64_gcc="$gmp_cflags64_gcc -mWHAT -D_LONG_LONG_LIMB" - # +O2 to cc triggers bug in mpz/powm.c (1.4) - gmp_cflags64_c89="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" - gmp_cflags64_cc="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" - gmp_cflags_c89="$gmp_cflags_cc +O2" - gmp_cflags_cc="$gmp_cflags_cc +O2" - ;; - - # VAX - vax*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" - ;; - - # Fujitsu - f30[01]-fujitsu-sysv*) - cclist="gcc vcc" - gmp_cflags_vcc="-g" # FIXME: flags for vcc? - ;; -esac - -case "${target}" in - *-*-mingw32) gmp_cflags_gcc="$gmp_cflags_gcc -mno-cygwin";; -esac - -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" 1>&6 -echo "configure:1352: checking for BSD-compatible nm" 1>&5 -if test "${ac_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$NM"; then - # Let the user override the test. - ac_cv_path_NM="$NM" -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm || test -f $ac_dir/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 - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - break - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - break - else - ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm -fi -fi - -NM="$ac_cv_path_NM" -echo "$ECHO_T""$NM" 1>&6 - # nm on 64-bit AIX needs to know the object file format -case "$target" in - powerpc64*-*-aix*) - NM="$NM -X 64" - ;; -esac - -# Save CFLAGS given on command line. -gmp_user_CFLAGS="$CFLAGS" - -if test -z "$CC"; then - # Find compiler. - -if test $host != $build; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi - -gmp_cc_list="$cclist" -gmp_req_64bit_cc="$os_64bit" - -CC32= -CC64= -for c in $gmp_cc_list; do - # Avoid cache hits. - unset CC - unset ac_cv_prog_CC - -# Extract the first word of "${ac_tool_prefix}$c", so it can be a program name with args. -set dummy ${ac_tool_prefix}$c; ac_word=$2 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:1418: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_CC="${ac_tool_prefix}$c" - break - done -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ECHO_T""$CC" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -if test -z "$ac_cv_prog_CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "$c", so it can be a program name with args. -set dummy $c; ac_word=$2 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:1452: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_CC="$c" - break - done - test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="$c" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ECHO_T""$CC" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - - else - CC="$c" - fi -fi - - if test -n "$CC"; then - eval c_flags=\$gmp_cflags_$c - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - CC="$CC" -CFLAGS="$c_flags" -echo $ECHO_N "checking if the C compiler ($CC) works with flags $CFLAGS... $ECHO_C" 1>&6 -echo "configure:1498: checking if the C compiler ($CC) works with flags $CFLAGS" 1>&5 - -# Simple test for all targets. -cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - tmp_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - tmp_cross=no - else - tmp_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - tmp_works=no -fi -rm -fr conftest* - -# Target specific tests. -if test "$tmp_works" = "yes"; then - case "$target" in - *-*-aix*) # Returning a funcptr. - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - tmp_works=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - tmp_works=no -fi -rm -f conftest* - ;; - esac -fi - -if test "$tmp_works" = "yes"; then - gmp_prog_cc_works=yes -else - gmp_prog_cc_works=no -fi - -echo "$ECHO_T""$tmp_works" 1>&6 - - if test "$gmp_prog_cc_works" != "yes"; then - continue - fi - - # Save first working compiler, whether 32- or 64-bit capable. - if test -z "$CC32"; then - CC32="$CC" - fi - if test "$gmp_req_64bit_cc" = "yes"; then - eval c_flags=\$gmp_cflags64_$c - - # Verify that the compiler works in 64-bit mode as well. - # /usr/ucb/cc on Solaris 7 can *compile* in 64-bit mode, but not link. - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - CC="$c" -CFLAGS="$c_flags" -echo $ECHO_N "checking if the C compiler ($CC) works with flags $CFLAGS... $ECHO_C" 1>&6 -echo "configure:1583: checking if the C compiler ($CC) works with flags $CFLAGS" 1>&5 - -# Simple test for all targets. -cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - tmp_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - tmp_cross=no - else - tmp_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - tmp_works=no -fi -rm -fr conftest* - -# Target specific tests. -if test "$tmp_works" = "yes"; then - case "$target" in - *-*-aix*) # Returning a funcptr. - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - tmp_works=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - tmp_works=no -fi -rm -f conftest* - ;; - esac -fi - -if test "$tmp_works" = "yes"; then - gmp_prog_cc_works=yes -else - gmp_prog_cc_works=no -fi - -echo "$ECHO_T""$tmp_works" 1>&6 - - if test "$gmp_prog_cc_works" = "yes"; then - - gmp_tmp_CC_save="$CC" - CC="$c" - echo $ECHO_N "checking whether the C compiler ($CC) is 64-bit capable... $ECHO_C" 1>&6 -echo "configure:1651: checking whether the C compiler ($CC) is 64-bit capable" 1>&5 - if test -z "$NM"; then - echo; echo "configure: GMP_CHECK_CC_64BIT: fatal: need nm" - exit 1 - fi - gmp_tmp_CFLAGS_save="$CFLAGS" - CFLAGS="$c_flags" - - case "$target" in - hppa2.0*-*-*) - # FIXME: If gcc is installed under another name than "gcc", we will - # test the wrong thing. - if test "$CC" != "gcc"; then - echo >conftest.c - gmp_tmp_vs=`$CC $CFLAGS -V -c -o conftest.o conftest.c 2>&1 | grep "^ccom:"` - rm conftest* - gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\(.*\)\..*\..* HP C.*/\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/'` - gmp_cv_cc_64bit=no - test -n "$gmp_tmp_v1" && test "$gmp_tmp_v1" -ge "10" \ - && test -n "$gmp_tmp_v2" && test "$gmp_tmp_v2" -ge "32" \ - && test -n "$gmp_tmp_v3" && test "$gmp_tmp_v3" -ge "30" \ - && gmp_cv_cc_64bit=yes - else # gcc - # FIXME: Compile a minimal file and determine if the resulting object - # file is an ELF file. If so, gcc can produce 64-bit code. - # Do we have file(1) for target? - gmp_cv_cc_64bit=no - fi - ;; - mips-sgi-irix6.*) - # We use `-n32' to cc and `-mabi=n32' to gcc, resulting in 64-bit - # arithmetic but not 64-bit pointers, so the general test for sizeof - # (void *) is not valid. - # Simply try to compile an empty main. If that succeeds return - # true. - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - gmp_cv_cc_64bit=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - gmp_cv_cc_64bit=no -fi -rm -f conftest* - ;; - *-*-*) - # Allocate an array of size sizeof (void *) and use nm to determine its - # size. We depend on the first declared variable being put at address 0. - cat >conftest.c <&5; (eval $gmp_compile) 2>&5; }; then - gmp_tmp_val=`$NM conftest.o | grep post | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - if test "$gmp_tmp_val" = "8"; then - gmp_cv_cc_64bit=yes - else - gmp_cv_cc_64bit=no - fi - else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - gmp_cv_cc_64bit=no - fi - rm -f conftest* - ;; - esac - - CC="$gmp_tmp_CC_save" - CFLAGS="$gmp_tmp_CFLAGS_save" - echo "$ECHO_T""$gmp_cv_cc_64bit" 1>&6 - - if test "$gmp_cv_cc_64bit" = "yes"; then - test -z "$CC64" && CC64="$c" - test -z "$CFLAGS64" && CFLAGS64="$c_flags" - # We have CC64 so we're done. - break - fi - fi - else - # We have CC32, and we don't need a 64-bit compiler so we're done. - break - fi - fi -done -CC="$CC32" - - # If 64-bit OS and we have a 64-bit compiler, use it. - if test -n "$os_64bit" && test -n "$CC64"; then - CC=$CC64 - CFLAGS=$CFLAGS64 - else - eval CFLAGS=\$gmp_cflags_$CC - fi - - # Try compiler flags that may work with only some compiler versions. - # gmp_optcflags: All or nothing. - eval optcflags=\$gmp_optcflags_$CC - if test -n "$optcflags"; then - CFLAGS_save="$CFLAGS" - CFLAGS="$CFLAGS $optcflags" - echo $ECHO_N "checking whether $CC accepts $optcflags... $ECHO_C" 1>&6 -echo "configure:1770: checking whether $CC accepts $optcflags" 1>&5 - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - - cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - optok=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - cross=no - else - cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - optok=no -fi -rm -fr conftest* - if test "$optok" = "yes"; then - echo "$ECHO_T""yes" 1>&6 - else - echo "$ECHO_T""no" 1>&6 - CFLAGS="$CFLAGS_save" - fi - fi - # gmp_xoptcflags: First is best, one has to work. - eval xoptcflags=\$gmp_xoptcflags_$CC - if test -n "$xoptcflags"; then - gmp_found="no" - for xopt in $xoptcflags; do - CFLAGS_save="$CFLAGS" - CFLAGS="$CFLAGS $xopt" - echo $ECHO_N "checking whether $CC accepts $xopt... $ECHO_C" 1>&6 -echo "configure:1814: checking whether $CC accepts $xopt" 1>&5 - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - - cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - optok=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - cross=no - else - cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - optok=no -fi -rm -fr conftest* - if test "$optok" = "yes"; then - echo "$ECHO_T""yes" 1>&6 - gmp_found="yes" - break - else - echo "$ECHO_T""no" 1>&6 - CFLAGS="$CFLAGS_save" - fi - done - if test "$gmp_found" = "no"; then - echo "$0: fatal: need a compiler that understands one of $xoptcflags" - exit 1 - fi - fi -fi - -# Restore CFLAGS given on command line. -# FIXME: We've run through quite some unnecessary code looking for a -# nice compiler and working flags for it, just to spoil that with user -# supplied flags. -test -n "$gmp_user_CFLAGS" && CFLAGS="$gmp_user_CFLAGS" - -# Select chosen compiler. - -echo $ECHO_N "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works... $ECHO_C" 1>&6 -echo "configure:1868: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) works" 1>&5 - -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - ac_cv_prog_cc_works=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - ac_cv_prog_cc_cross=no - else - ac_cv_prog_cc_cross=yes - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - ac_cv_prog_cc_works=no -fi -rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -echo "$ECHO_T""$ac_cv_prog_cc_works" 1>&6 -if test $ac_cv_prog_cc_works = no; then - { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 77; } -fi -echo $ECHO_N "checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler... $ECHO_C" 1>&6 -echo "configure:1910: checking whether the C compiler ($CC $CFLAGS $CPPFLAGS $LDFLAGS) is a cross-compiler" 1>&5 -echo "$ECHO_T""$ac_cv_prog_cc_cross" 1>&6 -cross_compiling=$ac_cv_prog_cc_cross - -echo $ECHO_N "checking whether we are using GNU C... $ECHO_C" 1>&6 -echo "configure:1915: checking whether we are using GNU C" 1>&5 -if test "${ac_cv_prog_gcc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi -fi -echo "$ECHO_T""$ac_cv_prog_gcc" 1>&6 - -if test "$ac_cv_prog_gcc" = "yes"; then - GCC=yes -else - GCC= -fi - -# Set CFLAGS if not already set. -if test -z "$CFLAGS"; then - CFLAGS="-g" - if test "$GCC" = "yes"; then - CFLAGS="$CFLAGS -O2" - fi -fi - -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - ac_cv_prog_CC="$CC" -fi - -# How to assemble. -CCAS="$CC -c" - -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" 1>&6 -echo "configure:1956: checking how to run the C preprocessor" 1>&5 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - -cat >conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - -cat >conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - -cat >conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2014: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP=/lib/cpp -fi -rm -f conftest* -fi -rm -f conftest* -fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" -fi - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -echo "$ECHO_T""$CPP" 1>&6 - -# 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 -# 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" -# ./install, which can be erroneously created by make from ./install.sh. -echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" 1>&6 -echo "configure:2050: checking for a BSD compatible install" 1>&5 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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 - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus $ac_dir/$ac_prog >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" - -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. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -echo "$ECHO_T""$INSTALL" 1>&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' - -echo $ECHO_N "checking whether ln -s works... $ECHO_C" 1>&6 -echo "configure:2107: checking whether ln -s works" 1>&5 -if test "${ac_cv_prog_LN_S+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi -fi -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - echo "$ECHO_T""yes" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -echo $ECHO_N "checking for suitable m4... $ECHO_C" 1>&6 -echo "configure:2128: checking for suitable m4" 1>&5 -if test "${gmp_cv_prog_m4+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$M4"; then - gmp_cv_prog_m4="$M4" -else - cat >conftest.m4 <<\EOF -define(dollarhash,``$#'')dnl -ifelse(dollarhash(x),1,`define(t1,Y)', -``bad: $# not supported (SunOS /usr/bin/m4) -'')dnl -ifelse(eval(89),89,`define(t2,Y)', -`bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4) -')dnl -ifelse(t1`'t2,YY,`good -')dnl -EOF - echo "trying m4" 1>&5 - gmp_tmp_val="`(m4 conftest.m4) 2>&5`" - echo "$gmp_tmp_val" 1>&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" 1>&5 - gmp_tmp_val="`($ac_dir/m4 conftest.m4) 2>&5`" - echo "$gmp_tmp_val" 1>&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 - { echo "configure: error: No usable m4 in \$PATH or /usr/5bin (see config.log for reasons)." 1>&2; exit 1; } - fi - fi - rm -f conftest.m4 -fi -fi -echo "$ECHO_T""$gmp_cv_prog_m4" 1>&6 -M4="$gmp_cv_prog_m4" - -# Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:2178: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_AR="ar" - break - done -fi -fi -AR="$ac_cv_prog_AR" -if test -n "$AR"; then - echo "$ECHO_T""$AR" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -# ar on AIX needs to know the object file format -case "$target" in - powerpc64*-*-aix*) - AR="$AR -X 64" - ;; -esac - -if test "$gmp_no_asm_syntax_testing" != "yes"; then - echo $ECHO_N "checking how to switch to text section... $ECHO_C" 1>&6 -echo "configure:2216: checking how to switch to text section" 1>&5 -if test "${gmp_cv_check_asm_text+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$target" in - *-*-aix*) - - gmp_cv_check_asm_text=".csect .text[PR]" - - ;; - *-*-hpux*) gmp_cv_check_asm_text=".code" ;; - *) gmp_cv_check_asm_text=".text" ;; -esac - -fi -echo "$ECHO_T""$gmp_cv_check_asm_text" 1>&6 -echo "define(, <$gmp_cv_check_asm_text>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking how to switch to data section... $ECHO_C" 1>&6 -echo "configure:2235: checking how to switch to data section" 1>&5 -if test "${gmp_cv_check_asm_data+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$target" in - *-*-aix*) - - gmp_cv_check_asm_data=".csect .data[RW]" - - ;; - *) gmp_cv_check_asm_data=".data" ;; -esac - -fi -echo "$ECHO_T""$gmp_cv_check_asm_data" 1>&6 -echo "define(, <$gmp_cv_check_asm_data>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking how to export a symbol... $ECHO_C" 1>&6 -echo "configure:2253: checking how to export a symbol" 1>&5 -if test "${gmp_cv_check_asm_globl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$target" in - *-*-hpux*) gmp_cv_check_asm_globl=".export" ;; - *) gmp_cv_check_asm_globl=".globl" ;; -esac - -fi -echo "$ECHO_T""$gmp_cv_check_asm_globl" 1>&6 -echo "define(, <$gmp_cv_check_asm_globl>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking what assembly label suffix to use... $ECHO_C" 1>&6 -echo "configure:2267: checking what assembly label suffix to use" 1>&5 -if test "${gmp_cv_check_asm_label_suffix+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$target" in - *-*-hpux*) gmp_cv_check_asm_label_suffix="" ;; - *) gmp_cv_check_asm_label_suffix=":" ;; -esac - -fi -echo "$ECHO_T""$gmp_cv_check_asm_label_suffix" 1>&6 -echo "define(, <\$1$gmp_cv_check_asm_label_suffix>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking how the .type assembly directive should be used... $ECHO_C" 1>&6 -echo "configure:2281: checking how the .type assembly directive should be used" 1>&5 -if test "${gmp_cv_check_asm_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - ac_assemble="$CCAS $CFLAGS conftest.s 1>&5" -for gmp_tmp_prefix in @ \# %; do - echo " .type sym,${gmp_tmp_prefix}function" > conftest.s - if { (eval echo configure:2288: \"$ac_assemble\") 1>&5; (eval $ac_assemble) 2>&5; }; then - gmp_cv_check_asm_type=".type \$1,${gmp_tmp_prefix}\$2" - break - fi -done -if test -z "$gmp_cv_check_asm_type"; then - gmp_cv_check_asm_type="dnl" -fi - -fi -echo "$ECHO_T""$gmp_cv_check_asm_type" 1>&6 -echo "define(, <$gmp_cv_check_asm_type>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking if the .size assembly directive works... $ECHO_C" 1>&6 -echo "configure:2302: checking if the .size assembly directive works" 1>&5 -if test "${gmp_cv_check_asm_size+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - ac_assemble="$CCAS $CFLAGS conftest.s 1>&5" -echo ' .size sym,1' > conftest.s -if { (eval echo configure:2308: \"$ac_assemble\") 1>&5; (eval $ac_assemble) 2>&5; }; then - gmp_cv_check_asm_size=".size \$1,\$2" -else - gmp_cv_check_asm_size="dnl" -fi - -fi -echo "$ECHO_T""$gmp_cv_check_asm_size" 1>&6 -echo "define(, <$gmp_cv_check_asm_size>)" >> $gmp_tmpconfigm4 - -echo $ECHO_N "checking what prefix to use for a local label... $ECHO_C" 1>&6 -echo "configure:2319: checking what prefix to use for a local label" 1>&5 -if test "${gmp_cv_check_asm_lsym_prefix+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -z "$NM"; then - echo; echo "GMP_CHECK_ASM_LSYM_PREFIX: fatal: need nm" - exit 1 -fi -ac_assemble="$CCAS $CFLAGS conftest.s 1>&5" -gmp_cv_check_asm_lsym_prefix="L" -for gmp_tmp_pre in L .L $ L$; do - cat > conftest.s <&5; (eval $ac_assemble) 2>&5; }; then - $NM conftest.o >/dev/null 2>&1 - gmp_rc=$? - if test "$gmp_rc" != "0"; then - echo "configure: $NM failure, using default" - break - fi - if $NM conftest.o | grep gurkmacka >/dev/null; then true; else - gmp_cv_check_asm_lsym_prefix="$gmp_tmp_pre" - break - fi - else - echo "configure: failed program was:" >&5 - cat conftest.s >&5 - # Use default. - fi -done -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_lsym_prefix" 1>&6 -echo "define(, <${gmp_cv_check_asm_lsym_prefix}>)" >> $gmp_tmpconfigm4 - -echo $ECHO_N "checking how to define a 32-bit word... $ECHO_C" 1>&6 -echo "configure:2359: checking how to [define] a 32-bit word" 1>&5 -if test "${gmp_cv_check_asm_w32+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -z "$NM"; then - echo; echo "configure: GMP_CHECK_ASM_W32: fatal: need nm" - exit 1 -fi - -# 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. - -case "$target" in - *-*-hpux*) - gmp_cv_check_asm_w32=".word" - ;; - *-*-*) - ac_assemble="$CCAS $CFLAGS conftest.s 1>&5" - for gmp_tmp_op in .long .word; do - cat > conftest.s <&5; (eval $ac_assemble) 2>&5; }; then - - gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \ - -e 's;[^1-9]*\([0-9]*\).*;\1;'` - if test "$gmp_tmp_val" = "4"; then - gmp_cv_check_asm_w32="$gmp_tmp_op" - break - fi - fi - done - ;; -esac - -if test -z "$gmp_cv_check_asm_w32"; then - echo; echo "configure: GMP_CHECK_ASM_W32: fatal: do not know how to define a 32-bit word" - exit 1 -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_w32" 1>&6 -echo "define(, <$gmp_cv_check_asm_w32>)" >> $gmp_tmpconfigm4 - - echo $ECHO_N "checking if symbols are prefixed by underscore... $ECHO_C" 1>&6 -echo "configure:2412: checking if symbols are prefixed by underscore" 1>&5 -if test "${gmp_cv_check_asm_underscore+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - if grep _underscore_test conftest* >/dev/null; then - gmp_cv_check_asm_underscore=yes - else - gmp_cv_check_asm_underscore=no - fi -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_underscore" 1>&6 -if test "$gmp_cv_check_asm_underscore" = "yes"; then - -echo 'define(, <_>)' >> $gmp_tmpconfigm4 - - underscore=yes -else - -echo 'define(, <>)' >> $gmp_tmpconfigm4 - - underscore=no -fi - -echo $ECHO_N "checking if .align assembly directive is logarithmic... $ECHO_C" 1>&6 -echo "configure:2449: checking if .align assembly directive is logarithmic" 1>&5 -if test "${gmp_cv_check_asm_align_log+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -z "$NM"; then - echo; echo "configure: GMP_CHECK_ASM_ALIGN_LOG: fatal: need nm" - exit 1 -fi -cat > conftest.s <&5; (eval $ac_assemble) 2>&5; }; then - - gmp_tmp_val=`$NM conftest.o | 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_check_asm_align_log=yes - else - gmp_cv_check_asm_align_log=no - fi -else - echo "configure: failed program was:" >&5 - cat conftest.s >&5 -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_align_log" 1>&6 - -echo "define(,<$gmp_cv_check_asm_align_log>)" >> $gmp_tmpconfigm4 - -if test "$gmp_cv_check_asm_align_log" = "yes"; then - asm_align=log -else - asm_align=nolog -fi - -fi - -family=generic - -case ${target} in - arm*-*-*) - path="arm" - ;; - sparcv9*-*-solaris2.[789]* | sparc64*-*-solaris2.[789]* | ultrasparc*-*-solaris2.[789]*) - if test -n "$CC64" - then path="sparc64" - else path="sparc32/v9 sparc32/v8 sparc32" - fi - ;; - sparc64-*-linux*) - if test -n "$CC64" - then path="sparc64" - else path="sparc32/v9 sparc32/v8 sparc32" - fi - ;; - sparcv8*-*-* | microsparc*-*-*) - path="sparc32/v8 sparc32" - if test x${floating_point} = xno - then extra_functions="udiv_nfp" - else extra_functions="udiv_fp" - fi - ;; - sparcv9*-*-* | ultrasparc*-*-*) - path="sparc32/v9 sparc32/v8 sparc32" - extra_functions="udiv_fp" - ;; - supersparc*-*-*) - path="sparc32/v8/supersparc sparc32/v8 sparc32" - extra_functions="udiv" - ;; - sparc*-*-*) path="sparc32" - if test x${floating_point} = xno - then extra_functions="udiv_nfp" - else extra_functions="udiv_fp" - fi - ;; - hppa7000*-*-*) - path="hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd" - ;; - hppa1.0*-*-*) - path="hppa" - extra_functions="udiv_qrnnd" - ;; - hppa2.0w-*-*) - path="pa64w" - extra_functions="umul_ppmm udiv_qrnnd" - ;; - hppa2.0*-*-*) - if test -n "$CC64"; then - path="pa64" - extra_functions="umul_ppmm udiv_qrnnd" - # We need to use the system compiler, or actually the system assembler, - # since GAS has not been ported to understand the 2.0 instructions. - CCAS="$CC64 -c" - else - # FIXME: path should be "hppa/hppa2_0 hppa/hppa1_1 hppa" - path="hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd" - fi - ;; - hppa*-*-*) #assume pa7100 - path="hppa/hppa1_1/pa7100 hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd";; - f30[01]-fujitsu-sysv*) - path=fujitsu;; - alphaev6*-*-*) path="alpha/ev6 alpha"; extra_functions="invert_limb cntlz";; - alphaev5*-*-*) path="alpha/ev5 alpha"; extra_functions="invert_limb cntlz";; - alpha*-*-*) path="alpha"; extra_functions="invert_limb cntlz";; - # Cray vector machines. This must come after alpha* so that we can - # recognize present and future vector processors with a wildcard. - *-cray-unicos*) - path="cray" - extra_functions="mulww";; - am29000*-*-*) path="a29k";; - a29k*-*-*) path="a29k";; - - # AMD and Intel x86 configurations - - i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*) - gmp_m4postinc="x86/x86-defs.m4" - extra_functions="udiv umul" - CALLING_CONVENTIONS_OBJS="x86call.o x86check.o" - -echo $ECHO_N "checking if the assembler takes cl with shldl... $ECHO_C" 1>&6 -echo "configure:2583: checking if the assembler takes cl with shldl" 1>&5 -if test "${gmp_cv_check_asm_shldl_cl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat > conftest.s <&5; (eval $ac_assemble) 2>&5; }; then - gmp_cv_check_asm_shldl_cl=yes -else - gmp_cv_check_asm_shldl_cl=no -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_shldl_cl" 1>&6 -if test "$gmp_cv_check_asm_shldl_cl" = "yes"; then - -echo 'define(, <1>)' >> $gmp_tmpconfigm4 - -else - -echo 'define(, <0>)' >> $gmp_tmpconfigm4 - -fi - - echo $ECHO_N "checking if the .align directive accepts an 0x90 fill in .text... $ECHO_C" 1>&6 -echo "configure:2612: checking if the .align directive accepts an 0x90 fill in .text" 1>&5 -if test "${gmp_cv_check_asm_align_fill_0x90+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat > conftest.s <&5 - if echo "$gmp_tmp_val" | grep "Warning: Fill parameter ignored for executable section"; then - echo "Supressing this warning by omitting 0x90" 1>&5 - gmp_cv_check_asm_align_fill_0x90=no - else - gmp_cv_check_asm_align_fill_0x90=yes - fi -else - echo "Non-zero exit code" 1>&5 - echo "$gmp_tmp_val" 1>&5 - gmp_cv_check_asm_align_fill_0x90=no -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_align_fill_0x90" 1>&6 - -echo "define(,<$gmp_cv_check_asm_align_fill_0x90>)" >> $gmp_tmpconfigm4 - - # the CPUs below wanting to know about mmx - case ${target} in - pentiummmx-*-* | pentium[23]-*-* | k6*-*-* | athlon-*-*) - -echo $ECHO_N "checking if the assembler knows about MMX instructions... $ECHO_C" 1>&6 -echo "configure:2649: checking if the assembler knows about MMX instructions" 1>&5 -if test "${gmp_cv_check_asm_mmx+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat > conftest.s <&5; (eval $ac_assemble) 2>&5; }; then - gmp_cv_check_asm_mmx=yes -else - gmp_cv_check_asm_mmx=no -fi -rm -f conftest* - -fi -echo "$ECHO_T""$gmp_cv_check_asm_mmx" 1>&6 -if test "$gmp_cv_check_asm_mmx" = "yes"; then - tmp_mmx=yes -else - echo "configure: warning: +----------------------------------------------------------" 1>&2 - echo "configure: warning: | WARNING WARNING WARNING" 1>&2 - echo "configure: warning: | Target CPU has MMX code, but it can't be assembled by" 1>&2 - echo "configure: warning: | $CCAS $CFLAGS" 1>&2 - echo "configure: warning: | Non-MMX replacements will be used." 1>&2 - echo "configure: warning: | This will be an inferior build." 1>&2 - echo "configure: warning: +----------------------------------------------------------" 1>&2 - tmp_mmx=no -fi - - ;; - esac - - # default for anything not otherwise mentioned - path="x86" - - case ${target} in - i[34]86*-*-*) - path="x86" - ;; - k5*-*-*) - # don't know what best suits k5 - path="x86" - ;; - i586*-*-* | pentium-*-*) - path="x86/pentium x86" - ;; - pentiummmx-*-*) - path="x86/pentium x86" - if test "$tmp_mmx" = yes; then - path="x86/pentium/mmx $path" - fi - ;; - i686*-*-* | pentiumpro-*-*) - path="x86/p6 x86" - ;; - pentium2-*-*) - path="x86/p6 x86" - # The pentium/mmx lshift and rshift are good on p6 and can be used - # until there's something specific for p6. - if test "$tmp_mmx" = yes; then - path="x86/p6/mmx x86/pentium/mmx $path" - fi - ;; - pentium3-*-*) - path="x86/p6 x86" - # The pentium/mmx lshift and rshift are good on p6 and can be used - # until there's something specific for p6. - if test "$tmp_mmx" = yes; then - path="x86/p6/p3mmx x86/p6/mmx x86/pentium/mmx $path" - fi - ;; - k6[23]*-*-*) - path="x86/k6 x86" - if test "$tmp_mmx" = yes; then - path="x86/k6/k62mmx x86/k6/mmx $path" - fi - ;; - k6*-*-*) - path="x86/k6 x86" - if test "$tmp_mmx" = yes; then - path="x86/k6/mmx $path" - fi - ;; - athlon-*-*) - path="x86/k7 x86" - if test "$tmp_mmx" = yes; then - path="x86/k7/mmx $path" - fi - ;; - esac - ;; - - i960*-*-*) path="i960";; - - ia64*-*-*) path="ia64";; - -# Motorola 68k configurations. Let m68k mean 68020-68040. - m680[234]0*-*-* | m68k*-*-* | \ - m68*-next-nextstep*) # Nexts are at least '020 - path="m68k/mc68020 m68k" - family=m68k - ;; - m68000*-*-*) - path="m68k" - family=m68k - ;; - - m88k*-*-* | m88k*-*-*) path="m88k";; - m88110*-*-*) path="m88k/mc88110 m88k";; - ns32k*-*-*) path="ns32k";; - - pyramid-*-*) path="pyr";; - - ppc601-*-*) path="power powerpc32";; - powerpc64*-*-*) path="powerpc64";; - powerpc*-*-*) path="powerpc32";; - rs6000-*-* | power-*-* | power2-*-*) - path="power" - extra_functions="udiv_w_sdiv" - ;; - - sh-*-*) path="sh";; - sh2-*-*) path="sh/sh2 sh";; - - mips[34]*-*-*) path="mips3";; - mips*-*-irix6*) path="mips3";; - mips*-*-*) path="mips2";; - - vax*-*-*) path="vax"; extra_functions="udiv_w_sdiv";; - - z8000x*-*-*) path="z8000x"; extra_functions="udiv_w_sdiv";; - z8000*-*-*) path="z8000"; extra_functions="udiv_w_sdiv";; - - clipper*-*-*) path="clipper";; -esac - -if test -n "$CALLING_CONVENTIONS_OBJS"; then - cat >>confdefs.h <<\EOF -#define HAVE_CALLING_CONVENTIONS 1 -EOF - -fi - -case ${target} in - i[5-8]86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*) - # rdtsc is in pentium and up, not in i386 and i486 - SPEED_CYCLECOUNTER_OBJS=pentium.lo - ;; - alpha*-*-*) - SPEED_CYCLECOUNTER_OBJS=alpha.lo - ;; - sparcv9*-*-* | ultrasparc*-*-* | sparc64*-*-*) - SPEED_CYCLECOUNTER_OBJS=sparcv9.lo - ;; - hppa2*-*-*) - SPEED_CYCLECOUNTER_OBJS=hppa2.lo - ;; - hppa*-*-*) - SPEED_CYCLECOUNTER_OBJS=hppa.lo - ;; -esac - -if test -n "$SPEED_CYCLECOUNTER_OBJS" -then - cat >>confdefs.h <<\EOF -#define HAVE_SPEED_CYCLECOUNTER 1 -EOF - -fi - -echo $ECHO_N "checking for Cygwin environment... $ECHO_C" 1>&6 -echo "configure:2822: checking for Cygwin environment" 1>&5 -if test "${ac_cv_cygwin+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_cygwin=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_cygwin=no -fi -rm -f conftest* -fi -echo "$ECHO_T""$ac_cv_cygwin" 1>&6 -CYGWIN= -test "$ac_cv_cygwin" = yes && CYGWIN=yes -echo $ECHO_N "checking for mingw32 environment... $ECHO_C" 1>&6 -echo "configure:2856: checking for mingw32 environment" 1>&5 -if test "${ac_cv_mingw32+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_mingw32=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_mingw32=no -fi -rm -f conftest* -fi -echo "$ECHO_T""$ac_cv_mingw32" 1>&6 -MINGW32= -test "$ac_cv_mingw32" = yes && MINGW32=yes -echo $ECHO_N "checking for EMX OS/2 environment... $ECHO_C" 1>&6 -echo "configure:2887: checking for EMX OS/2 environment" 1>&5 -if test "${ac_cv_emxos2+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_emxos2=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_emxos2=no -fi -rm -f conftest* -fi -echo "$ECHO_T""$ac_cv_emxos2" 1>&6 -EMXOS2= -test "$ac_cv_emxos2" = yes && EMXOS2=yes - -echo $ECHO_N "checking for executable suffix... $ECHO_C" 1>&6 -echo "configure:2919: checking for executable suffix" 1>&5 -if test "${ac_cv_exeext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test "$CYGWIN" = yes || test "$MINGW32" = yes || test "$EMXOS2" = yes; then - ac_cv_exeext=.exe -else - rm -f conftest* - echo 'int main () { return 0; }' >conftest.$ac_ext - ac_cv_exeext= - if { (eval echo configure:2929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - for ac_file in conftest.*; do - case $ac_file in - *.c | *.C | *.o | *.obj | *.xcoff) ;; - *) ac_cv_exeext=`echo $ac_file | sed -e s/conftest//` ;; - esac - done - else - { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } - fi - rm -f conftest* - test x"${ac_cv_exeext}" = x && ac_cv_exeext=no -fi -fi - -EXEEXT="" -test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} -echo "$ECHO_T""${ac_cv_exeext}" 1>&6 -ac_exeext=$EXEEXT - -echo $ECHO_N "checking for object suffix... $ECHO_C" 1>&6 -echo "configure:2950: checking for object suffix" 1>&5 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - rm -f conftest* -echo 'int i = 1;' >conftest.$ac_ext -if { (eval echo configure:2956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - for ac_file in conftest.*; do - case $ac_file in - *.c) ;; - *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; - esac - done -else - { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } -fi -rm -f conftest* -fi - -echo "$ECHO_T""$ac_cv_objext" 1>&6 -OBJEXT=$ac_cv_objext -ac_objext=$ac_cv_objext - -case "$target" in - *-*-aix4.[3-9]*) enable_shared=no ;; -esac -# Check whether --enable-shared or --disable-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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_shared=yes -fi -# Check whether --enable-static or --disable-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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_static=yes -fi -# Check whether --enable-fast-install or --disable-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. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac -else - enable_fast_install=yes -fi - -echo $ECHO_N "checking build system type... $ECHO_C" 1>&6 -echo "configure:3044: checking build system type" 1>&5 -if test "x$ac_cv_build" = "x" || (test "x$build" != "xNONE" && test "x$build" != "x$ac_cv_build_alias"); then - - # Make sure we can run config.sub. - if $ac_config_sub sun4 >/dev/null 2>&1; then :; else - { echo "configure: error: cannot run $ac_config_sub" 1>&2; exit 1; } - fi - - ac_cv_build_alias=$build - case "$ac_cv_build_alias" in - NONE) - case $nonopt in - NONE) - ac_cv_build_alias=$host_alias ;; - *) ac_cv_build_alias=$nonopt ;; - esac ;; - esac - - ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || exit 1 - ac_cv_build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - ac_cv_build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - ac_cv_build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -else - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -fi - -echo "$ECHO_T""$ac_cv_build" 1>&6 - -build=$ac_cv_build -build_alias=$ac_cv_build_alias -build_cpu=$ac_cv_build_cpu -build_vendor=$ac_cv_build_vendor -build_os=$ac_cv_build_os - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo $ECHO_N "checking for ld used by GCC... $ECHO_C" 1>&6 -echo "configure:3090: checking for ld used by GCC" 1>&5 - case $target 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. - [\\/]* | [A-Za-z]:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the path 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 "$with_gnu_ld" = yes; then - echo $ECHO_N "checking for GNU ld... $ECHO_C" 1>&6 -echo "configure:3120: checking for GNU ld" 1>&5 -else - echo $ECHO_N "checking for non-GNU ld... $ECHO_C" 1>&6 -echo "configure:3123: checking for non-GNU ld" 1>&5 -fi -if test "${ac_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi -fi - -LD="$ac_cv_path_LD" -if test -n "$LD"; then - echo "$ECHO_T""$LD" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi -test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" 1>&6 -echo "configure:3158: checking if the linker ($LD) is GNU ld" 1>&5 -if test "${ac_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - # I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi -fi -echo "$ECHO_T""$ac_cv_prog_gnu_ld" 1>&6 -with_gnu_ld=$ac_cv_prog_gnu_ld - -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" 1>&6 -echo "configure:3173: checking for $LD option to reload object files" 1>&5 -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - lt_cv_ld_reload_flag='-r' -fi -echo "$ECHO_T""$lt_cv_ld_reload_flag" 1>&6 -reload_flag=$lt_cv_ld_reload_flag -test -n "$reload_flag" && reload_flag=" $reload_flag" - -echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" 1>&6 -echo "configure:3184: checking how to recognise dependant libraries" 1>&5 -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - lt_cv_file_magic_cmd='${MAGIC}' -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 -# which responds to the $file_magic_cmd with a given egrep 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 -aix4* | beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi4*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin* | mingw*) - lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' - lt_cv_file_magic_cmd='${OBJDUMP} -f' - ;; - -freebsd*) - case "$version_type" in - freebsd-elf*) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -irix5* | irix6*) - case "$host_os" in - irix5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" - ;; - *) - case "$LD" in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" - ;; - esac - lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be Linux ELF. -linux-gnu*) - case "$host_cpu" in - alpha* | i*86 | powerpc* | sparc* ) - lt_cv_deplibs_check_method=pass_all ;; - *) - # glibc up to 2.1.1 does not perform some relocations on ARM - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; - esac - lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` - ;; - -osf3* | osf4* | osf5*) - # this will be overridden with pass_all, but let us keep it just in case - lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' - lt_cv_file_magic_test_file=/shlib/libc.so - lt_cv_deplibs_check_method=pass_all - ;; - -sco3.2v5*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - lt_cv_file_magic_test_file=/lib/libc.so - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - case "$host_vendor" in - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - 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*` - ;; - esac - ;; -esac - -fi -echo "$ECHO_T""$lt_cv_deplibs_check_method" 1>&6 -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method - -if test $host != $build; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi - -# Only perform the check for file, if the check method requires it -case "$deplibs_check_method" in -file_magic*) - if test "$file_magic_cmd" = '${MAGIC}'; then - -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" 1>&6 -echo "configure:3308: checking for ${ac_tool_prefix}file" 1>&5 -if test "${lt_cv_path_MAGIC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$MAGIC" in - /*) - lt_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC="$MAGIC" - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin:$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC="$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="$lt_cv_path_MAGIC" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&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 - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC="$ac_save_MAGIC" - ;; -esac -fi - -MAGIC="$lt_cv_path_MAGIC" -if test -n "$MAGIC"; then - echo "$ECHO_T""$MAGIC" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -if test -z "$lt_cv_path_MAGIC"; then - if test -n "$ac_tool_prefix"; then - echo $ECHO_N "checking for file... $ECHO_C" 1>&6 -echo "configure:3370: checking for file" 1>&5 -if test "${lt_cv_path_MAGIC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - case "$MAGIC" in - /*) - lt_cv_path_MAGIC="$MAGIC" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_MAGIC="$MAGIC" # Let the user override the test with a dos path. - ;; - *) - ac_save_MAGIC="$MAGIC" - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="/usr/bin:$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC="$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="$lt_cv_path_MAGIC" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - egrep "$file_magic_regex" > /dev/null; then - : - else - cat <&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 - -EOF - fi ;; - esac - fi - break - fi - done - IFS="$ac_save_ifs" - MAGIC="$ac_save_MAGIC" - ;; -esac -fi - -MAGIC="$lt_cv_path_MAGIC" -if test -n "$MAGIC"; then - echo "$ECHO_T""$MAGIC" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - - else - MAGIC=: - fi -fi - - fi - ;; -esac - -case "$target" in -NONE) lt_target="$host" ;; -*) lt_target="$target" ;; -esac - -# 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 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:3446: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - break - done -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ECHO_T""$RANLIB" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -if test -z "$ac_cv_prog_RANLIB"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:3480: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_RANLIB="ranlib" - break - done - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" -fi -fi -RANLIB="$ac_cv_prog_RANLIB" -if test -n "$RANLIB"; then - echo "$ECHO_T""$RANLIB" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - - else - RANLIB=":" - fi -fi - -# 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 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:3518: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - break - done -fi -fi -STRIP="$ac_cv_prog_STRIP" -if test -n "$STRIP"; then - echo "$ECHO_T""$STRIP" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - -if test -z "$ac_cv_prog_STRIP"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo $ECHO_N "checking for $ac_word... $ECHO_C" 1>&6 -echo "configure:3552: checking for $ac_word" 1>&5 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else - for ac_path in `IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ac_dummy="$PATH" -for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - echo "$ac_dir/$ac_word" - fi -done -IFS="$ac_save_ifs" -`; do - ac_cv_prog_STRIP="strip" - break - done - test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":" -fi -fi -STRIP="$ac_cv_prog_STRIP" -if test -n "$STRIP"; then - echo "$ECHO_T""$STRIP" 1>&6 -else - echo "$ECHO_T""no" 1>&6 -fi - - else - STRIP=":" - fi -fi - -# Check for any special flags to pass to ltconfig. -libtool_flags="--cache-file=$cache_file" -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" - -fi -test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" -test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" - -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" -else - pic_mode=default -fi -test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" -test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$lt_target" in -*-*-irix6*) - # Find out which ABI we are using. - echo '#line 3618 "configure"' > conftest.$ac_ext - if { (eval echo configure:3619: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - 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" - echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" 1>&6 -echo "configure:3640: checking whether the C compiler needs -belf" 1>&5 -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - - cat >conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - lt_cv_cc_needs_belf=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - lt_cv_cc_needs_belf=no -fi -rm -f conftest* - - ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross - -fi -echo "$ECHO_T""$lt_cv_cc_needs_belf" 1>&6 - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; - -esac - -# Save cache, so that ltconfig can load it -cat >confcache <<\EOF -# 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. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# 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. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >>confcache -if cmp -s $cache_file confcache; then :; else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -AR="$AR" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -MAGIC="$MAGIC" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ -LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \ -AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \ -objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \ -deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ -$libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $lt_target \ -|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } - -# Reload cache, that may have been modified by ltconfig -if test -r "$cache_file"; then - echo "loading cache $cache_file" - test -f "$cache_file" && . $cache_file -else - echo "creating cache $cache_file" - >$cache_file -fi - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - -# Redirect the config.log output again, so that the ltconfig log is not -# clobbered by the next message. -exec 5>>./config.log - -echo $ECHO_N "checking whether optarg is declared... $ECHO_C" 1>&6 -echo "configure:3769: checking whether optarg is declared" 1>&5 -if test "${ac_cv_have_decl_optarg+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_have_decl_optarg=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_have_decl_optarg=no -fi -rm -f conftest* -fi -echo "$ECHO_T""$ac_cv_have_decl_optarg" 1>&6 -if test $ac_cv_have_decl_optarg = yes; then - cat >>confdefs.h <>confdefs.h <&6 -echo "configure:3813: checking for ANSI C header files" 1>&5 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat >conftest.$ac_ext < -#include -#include -#include - -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - -cat >conftest.$ac_ext < - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - 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 >conftest.$ac_ext < - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - 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 >conftest.$ac_ext < -#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)) - exit(2); - exit (0); -} -EOF -if { (eval echo configure:3913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* - -fi - -fi -fi -echo "$ECHO_T""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >>confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - -for ac_header in getopt.h unistd.h sys/sysctl.h sys/time.h -do -ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh` -echo $ECHO_N "checking for $ac_header... $ECHO_C" 1>&6 -echo "configure:3940: checking for $ac_header" 1>&5 -if eval "test \"\${$ac_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat >conftest.$ac_ext < - -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3952: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "$ac_ac_Header=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "$ac_ac_Header=no" -fi -rm -f conftest* -fi -echo "$ECHO_T""`eval echo '${'$ac_ac_Header'}'`" 1>&6 -if test `eval echo '${'$ac_ac_Header'}'` = yes; then - cat >>confdefs.h <&6 -echo "configure:3976: checking for void" 1>&5 -if test "${ac_cv_type_void+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_type_void=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_type_void=no -fi -rm -f conftest* -fi -echo "$ECHO_T""$ac_cv_type_void" 1>&6 -if test $ac_cv_type_void = yes; then - cat >>confdefs.h <&6 -echo "configure:4015: checking for preprocessor stringizing operator" 1>&5 -if test "${ac_cv_c_stringize+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat >conftest.$ac_ext <&5 | - egrep "#teststring" >/dev/null 2>&1; then - rm -rf conftest* - ac_cv_c_stringize=no -else - rm -rf conftest* - ac_cv_c_stringize=yes -fi -rm -f conftest* - -fi - -if test "${ac_cv_c_stringize}" = yes; then - cat >>confdefs.h <<\EOF -#define HAVE_STRINGIZE 1 -EOF - -fi -echo "$ECHO_T""${ac_cv_c_stringize}" 1>&6 - -for ac_func in getopt_long getpagesize popen processor_info strtoul sysconf sysctlbyname -do -ac_ac_var=`echo "ac_cv_func_$ac_func" | $ac_tr_sh` -echo $ECHO_N "checking for $ac_func... $ECHO_C" 1>&6 -echo "configure:4053: checking for $ac_func" 1>&5 -if eval "test \"\${$ac_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func(); -char (*f)(); - -int -main() -{ - -/* 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_$ac_func) || defined (__stub___$ac_func) -choke me -#else -f = $ac_func; -#endif - - ; - return 0; -} -EOF -if { (eval echo configure:4086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - eval "$ac_ac_var=yes" -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "$ac_ac_var=no" -fi -rm -f conftest* - -fi -echo "$ECHO_T""`eval echo '${'$ac_ac_var'}'`" 1>&6 -if test `eval echo '${'$ac_ac_var'}'` = yes; then - cat >>confdefs.h <&6 -echo "configure:4108: checking if ansi2knr should be used" 1>&5 -if test "${gmp_cv_c_ansi2knr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - cat >conftest.c <&5; (eval $ac_compile) 2>&5; }; then - gmp_cv_c_ansi2knr=no -else - gmp_cv_c_ansi2knr=yes -fi -rm -f conftest.* - -fi -echo "$ECHO_T""$gmp_cv_c_ansi2knr" 1>&6 -if test $gmp_cv_c_ansi2knr = no; then - U= ANSI2KNR= -else - U=_ ANSI2KNR=./ansi2knr - # Ensure some checks needed by ansi2knr itself. - -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" 1>&6 -echo "configure:4131: checking for ANSI C header files" 1>&5 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat >conftest.$ac_ext < -#include -#include -#include - -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4146: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - ac_cv_header_stdc=yes -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_header_stdc=no -fi -rm -f conftest* - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - -cat >conftest.$ac_ext < - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then - : -else - rm -rf conftest* - 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 >conftest.$ac_ext < - -EOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then - : -else - rm -rf conftest* - 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 >conftest.$ac_ext < -#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)) - exit(2); - exit (0); -} -EOF -if { (eval echo configure:4231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - : -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_header_stdc=no -fi -rm -fr conftest* - -fi - -fi -fi -echo "$ECHO_T""$ac_cv_header_stdc" 1>&6 -if test $ac_cv_header_stdc = yes; then - cat >>confdefs.h <<\EOF -#define STDC_HEADERS 1 -EOF - -fi - - for ac_header in string.h -do -ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh` -echo $ECHO_N "checking for $ac_header... $ECHO_C" 1>&6 -echo "configure:4258: checking for $ac_header" 1>&5 -if eval "test \"\${$ac_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" 1>&6 -else - -cat >conftest.$ac_ext < - -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "$ac_ac_Header=yes" -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "$ac_ac_Header=no" -fi -rm -f conftest* -fi -echo "$ECHO_T""`eval echo '${'$ac_ac_Header'}'`" 1>&6 -if test `eval echo '${'$ac_ac_Header'}'` = yes; then - cat >>confdefs.h <asm-syntax.h - cat $srcdir/mpn/underscore.h >>asm-syntax.h - echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; - m68k-no-nolog-elf) - echo '#define ELF_SYNTAX' >asm-syntax.h - echo '#define C_SYMBOL_NAME(name) name' >>asm-syntax.h - echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; -esac - -# The pattern here tests for an absolute path the same way as -# _AC_OUTPUT_FILES in autoconf acgeneral.m4. - -echo "dnl CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir" >> $gmp_tmpconfigm4 - -case "$srcdir" in -[\\/]* | ?:[\\/]* ) - -echo "define(,<\`$srcdir'>)" >> $gmp_tmpconfigm4 - ;; -*) - -echo "define(,<\`../$srcdir'>)" >> $gmp_tmpconfigm4 - ;; -esac - -echo "include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')" >> $gmp_tmpconfigm4p - -# Must be after asm-defs.m4 - -echo "define_not_for_expansion(\`HAVE_TARGET_CPU_$target_cpu')" >> $gmp_tmpconfigm4p - -case "$target" in - alpha*-cray-unicos*) - gmp_m4postinc="alpha/unicos.m4" - ;; - alpha*-*-*) - gmp_m4postinc="alpha/default.m4" - ;; - power*-*-*) - case "$target" in - *-*-mach* | *-*-rhapsody* | *-*-nextstep* | *-*-darwin* | *-*-macosx*) - ;; # these use non-conventional assembly syntax. - powerpc64-*-aix*) - gmp_m4postinc="powerpc32/regmap.m4 powerpc64/aix.m4" - ;; - *-*-aix*) - gmp_m4postinc="powerpc32/regmap.m4 powerpc32/aix.m4" - ;; - *) - gmp_m4postinc="powerpc32/regmap.m4" - ;; - esac - ;; -esac - -for tmp_f in $gmp_m4postinc; do - -echo "include_mpn(\`$tmp_f')" >> $gmp_tmpconfigm4p - -done - -# Set up `gmp_links'. It's a list of link:file pairs that configure will -# process to create link -> file. -gmp_links= - -# If the user specified `MPN_PATH', use that instead of the path we've -# come up with. -if test -z "$MPN_PATH"; then - path="$path generic" -else - path="$MPN_PATH" -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_ to get them to generate the right code.) - -# FIXME: udiv and umul aren't in $gmp_mpn_functions_optional yet since -# there's some versions of those files which should be checked for bit -# rot first. Put them in $extra_functions for each target for now, -# change to standard optionals when all are ready. - -# Note: The following lines defining $gmp_mpn_functions_optional -# and $gmp_mpn_functions are parsed by the "macos/configure" -# Perl script. So if you change the lines in a major way -# make sure to run and examine the output from -# -# % (cd macos; perl configure) - -gmp_mpn_functions_optional="copyi copyd com_n \ - and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n" - -gmp_mpn_functions="${extra_functions} inlines add_n sub_n mul_1 addmul_1 \ - submul_1 lshift rshift diveby3 divrem divrem_1 divrem_2 \ - mod_1 mod_1_rs pre_mod_1 dump \ - mul mul_fft mul_n mul_basecase sqr_basecase random \ - random2 sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp perfsqr \ - bdivmod gcd_1 gcd gcdext tdiv_qr bz_divrem_n sb_divrem_mn jacbase \ - $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="mpn/mp_bases.lo" - -# SLPJ trace -echo "Peering at file structure (takes a while)..." 1>&6 - -for tmp_fn in ${gmp_mpn_functions} ; do -# SLPJ trace - echo "...$tmp_fn..." 1>&6 - -# This line was -# rm -f mpn/${tmp_fn}.[Ssc] mpn/${tmp_fn}.asm -# but I found that on my NT workstation the command -# would unpredictably hang. rm wasn't an active process, -# but absolutlely nothing was happening. -# I *think* that expanding the [Ssc] cures the problem -# SLPJ May 01 - rm -f mpn/${tmp_fn}.S mpn/${tmp_fn}.s mpn/${tmp_fn}.c mpn/${tmp_fn}.asm - - echo "...$tmp_fn (done rm)..." 1>&6 - - # functions that can be provided by multi-function files - tmp_mulfunc= - case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - 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" ;; - esac - - found=no - for tmp_dir in $path; do - -# SLPJ trace -# We get stuck sometimes - echo " ...dir $tmp_dir..." 1>&6 - for tmp_base in $tmp_fn $tmp_mulfunc; do - -# SLPJ trace -# We get stuck sometimes - echo " ...base $tmp_base..." 1>&6 - for tmp_ext in asm S s c; do - tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext - -# SLPJ trace -# We get stuck sometimes - echo " ...$tmp_file..." 1>&6 - - if test -f $tmp_file; then - found=yes - - mpn_objects="$mpn_objects ${tmp_fn}.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_fn}.lo" - gmp_links="$gmp_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext" - - # duplicate AC_DEFINEs are harmless, so it doesn't matter - # that multi-function files get grepped here repeatedly - 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 <&2; exit 1; } - fi - fi -done - - -# Create link for gmp-mparam.h. - -# SLPJ trace -echo "Creating link for gmp-mparam.h..." 1>&6 - -for tmp_dir in $path ; do - rm -f gmp-mparam.h - if test -f $srcdir/mpn/${tmp_dir}/gmp-mparam.h ; then - gmp_links="$gmp_links gmp-mparam.h:mpn/${tmp_dir}/gmp-mparam.h" - - # Copy any KARATSUBA_SQR_THRESHOLD in gmp-mparam.h to config.m4. - # Some versions of sqr_basecase.asm use this. - tmp_gmp_karatsuba_sqr_threshold="`sed -n 's/^#define KARATSUBA_SQR_THRESHOLD[ ]*\([0-9][0-9]*\).*$/\1/p' $srcdir/mpn/${tmp_dir}/gmp-mparam.h`" - if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then - -echo "define(,<$tmp_gmp_karatsuba_sqr_threshold>)" >> $gmp_tmpconfigm4 - - fi - - break - fi -done - -# SLPJ trace -echo "Digging out links to include in DISTCLEANFILES..." 1>&6 - -# Dig out the links from `gmp_links' for inclusion in DISTCLEANFILES. -gmp_srclinks= -for f in $gmp_links; do - gmp_srclinks="$gmp_srclinks `echo $f | sed 's/\(.*\):.*/\1/'`" -done - -echo "creating $gmp_configm4" -echo "dnl $gmp_configm4. Generated automatically by configure." > $gmp_configm4 -if test -f $gmp_tmpconfigm4; then - echo "changequote(<,>)dnl" >> $gmp_configm4 - echo "ifdef(<__CONFIG_M4_INCLUDED__>,,<" >> $gmp_configm4 - cat $gmp_tmpconfigm4 >> $gmp_configm4 - echo ">)" >> $gmp_configm4 - echo "changequote(\`,')dnl" >> $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 - -trap '' 1 2 15 -cat >confcache <<\EOF -# 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. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# 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. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >>confcache -if cmp -s $cache_file confcache; then :; else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -DEFS=-DHAVE_CONFIG_H - -: ${CONFIG_STATUS=./config.status} -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 -echo creating $CONFIG_STATUS -cat >$CONFIG_STATUS </dev/null | sed 1q`: -# -# $0 $ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -# Files that config.status was made for. -config_files="\\ - Makefile mpn/Makefile mpz/Makefile" -config_headers="\\ - config.h:config.in" -config_links="\\ - $gmp_links" -config_commands="\\ - default-1" - -ac_cs_usage="\\ -\\\`$CONFIG_STATUS' instantiates files from templates according to the -current configuration. - -Usage: $CONFIG_STATUS [OPTIONS] FILE... - - --recheck Update $CONFIG_STATUS by reconfiguring in the same conditions - --version Print the version of Autoconf and exit - --help Display this help and exit - --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 ." - -ac_cs_version="\\ -$CONFIG_STATUS generated by autoconf version 2.14a. -Configured on host `(hostname || uname -n) 2>/dev/null | sed 1q` by - `echo "$0 $ac_configure_args" | sed 's/[\\"\`\$]/\\\\&/g'`" - -# Root of the tmp file names. Use pid to allow concurrent executions. -ac_cs_root=cs\$\$ -ac_given_srcdir=$srcdir -ac_given_INSTALL="$INSTALL" - -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test \$# != 0 -do - case "\$1" in - --*=*) - ac_option=\`echo "\$1" | sed -e 's/=.*//'\` - ac_optarg=\`echo "\$1" | sed -e 's/[^=]*=//'\` - shift - set dummy "\$ac_option" "\$ac_optarg" \${1+"\$@"} - shift - ;; - -*);; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_need_defaults=false;; - esac - - case "\$1" in - - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 `echo "$ac_configure_args" | sed 's/[\\"\`\$]/\\\\&/g'` --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "\$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - echo "$CONFIG_STATUS: ambiguous option: \$ac_option -Try \\\`$CONFIG_STATUS --help' for more information."; exit 1 ;; - -help | --help | --hel ) - echo "\$ac_cs_usage"; exit 0 ;; - --file | --fil | --fi | --f ) - shift - CONFIG_FILES="\$CONFIG_FILES \$1" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - shift - CONFIG_HEADERS="\$CONFIG_FILES \$1" - ac_need_defaults=false;; - - # Handling of arguments. - 'Makefile' ) CONFIG_FILES="\$CONFIG_FILES Makefile" ;; - 'mpz/Makefile' ) CONFIG_FILES="\$CONFIG_FILES mpz/Makefile" ;; - 'mpn/Makefile' ) CONFIG_FILES="\$CONFIG_FILES mpn/Makefile" ;; - '$gmp_links' ) CONFIG_LINKS="\$CONFIG_LINKS $gmp_links" ;; - 'default-1' ) CONFIG_COMMANDS="\$CONFIG_COMMANDS default-1" ;; - 'config.h' ) CONFIG_HEADERS="\$CONFIG_HEADERS config.h:config.in" ;; - - # This is an error. - -*) echo "$CONFIG_STATUS: unrecognized option: \$1 -Try \\\`$CONFIG_STATUS --help' for more information."; exit 1 ;; - *) echo "$CONFIG_STATUS: invalid argument: \$1"; exit 1 ;; - esac - shift -done - -EOF - -cat >>$CONFIG_STATUS <<\EOF -# 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. -if $ac_need_defaults; then - : ${CONFIG_FILES=$config_files} - : ${CONFIG_HEADERS=$config_headers} - : ${CONFIG_LINKS=$config_links} - : ${CONFIG_COMMANDS=$config_commands} -fi - -# Trap to remove the temp files. -trap 'rm -fr $ac_cs_root*; exit 1' 1 2 15 - -EOF - -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <\$ac_cs_root.subs <<\\CEOF -s%@exec_prefix@%$exec_prefix%;t t -s%@prefix@%$prefix%;t t -s%@program_transform_name@%$program_transform_name%;t t -s%@bindir@%$bindir%;t t -s%@sbindir@%$sbindir%;t t -s%@libexecdir@%$libexecdir%;t t -s%@datadir@%$datadir%;t t -s%@sysconfdir@%$sysconfdir%;t t -s%@sharedstatedir@%$sharedstatedir%;t t -s%@localstatedir@%$localstatedir%;t t -s%@libdir@%$libdir%;t t -s%@includedir@%$includedir%;t t -s%@oldincludedir@%$oldincludedir%;t t -s%@infodir@%$infodir%;t t -s%@mandir@%$mandir%;t t -s%@SHELL@%$SHELL%;t t -s%@ECHO_C@%$ECHO_C%;t t -s%@ECHO_N@%$ECHO_N%;t t -s%@ECHO_T@%$ECHO_T%;t t -s%@CFLAGS@%$CFLAGS%;t t -s%@CPPFLAGS@%$CPPFLAGS%;t t -s%@CXXFLAGS@%$CXXFLAGS%;t t -s%@FFLAGS@%$FFLAGS%;t t -s%@DEFS@%$DEFS%;t t -s%@LDFLAGS@%$LDFLAGS%;t t -s%@LIBS@%$LIBS%;t t -s%@host@%$host%;t t -s%@host_alias@%$host_alias%;t t -s%@host_cpu@%$host_cpu%;t t -s%@host_vendor@%$host_vendor%;t t -s%@host_os@%$host_os%;t t -s%@target@%$target%;t t -s%@target_alias@%$target_alias%;t t -s%@target_cpu@%$target_cpu%;t t -s%@target_vendor@%$target_vendor%;t t -s%@target_os@%$target_os%;t t -s%@build@%$build%;t t -s%@build_alias@%$build_alias%;t t -s%@build_cpu@%$build_cpu%;t t -s%@build_vendor@%$build_vendor%;t t -s%@build_os@%$build_os%;t t -s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%;t t -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%;t t -s%@INSTALL_DATA@%$INSTALL_DATA%;t t -s%@PACKAGE@%$PACKAGE%;t t -s%@VERSION@%$VERSION%;t t -s%@ACLOCAL@%$ACLOCAL%;t t -s%@AUTOCONF@%$AUTOCONF%;t t -s%@AUTOMAKE@%$AUTOMAKE%;t t -s%@AUTOHEADER@%$AUTOHEADER%;t t -s%@MAKEINFO@%$MAKEINFO%;t t -s%@AMTAR@%$AMTAR%;t t -s%@install_sh@%$install_sh%;t t -s%@AWK@%$AWK%;t t -s%@SET_MAKE@%$SET_MAKE%;t t -s%@AMDEP@%$AMDEP%;t t -s%@AMDEPBACKSLASH@%$AMDEPBACKSLASH%;t t -s%@DEPDIR@%$DEPDIR%;t t -s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%;t t -s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%;t t -s%@MAINT@%$MAINT%;t t -s%@WANT_MPBSD_TRUE@%$WANT_MPBSD_TRUE%;t t -s%@WANT_MPBSD_FALSE@%$WANT_MPBSD_FALSE%;t t -s%@WANT_MPFR_TRUE@%$WANT_MPFR_TRUE%;t t -s%@WANT_MPFR_FALSE@%$WANT_MPFR_FALSE%;t t -s%@CC@%$CC%;t t -s%@CCAS@%$CCAS%;t t -s%@CPP@%$CPP%;t t -s%@LN_S@%$LN_S%;t t -s%@M4@%$M4%;t t -s%@AR@%$AR%;t t -s%@CALLING_CONVENTIONS_OBJS@%$CALLING_CONVENTIONS_OBJS%;t t -s%@SPEED_CYCLECOUNTER_OBJS@%$SPEED_CYCLECOUNTER_OBJS%;t t -s%@EXEEXT@%$EXEEXT%;t t -s%@OBJEXT@%$OBJEXT%;t t -s%@RANLIB@%$RANLIB%;t t -s%@STRIP@%$STRIP%;t t -s%@LIBTOOL@%$LIBTOOL%;t t -s%@U@%$U%;t t -s%@ANSI2KNR@%$ANSI2KNR%;t t -s%@mpn_objects@%$mpn_objects%;t t -s%@mpn_objs_in_libgmp@%$mpn_objs_in_libgmp%;t t -s%@gmp_srclinks@%$gmp_srclinks%;t t -CEOF - -EOF - - cat >>$CONFIG_STATUS <<\EOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds="" - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $ac_cs_root.subs >$ac_cs_root.sfrag - else - sed "${ac_end}q" $ac_cs_root.subs >$ac_cs_root.sfrag - fi - if test ! -s $ac_cs_root.sfrag; then - ac_more_lines=false - rm -f $ac_cs_root.sfrag - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $ac_cs_root.sfrag) >$ac_cs_root.s$ac_sed_frag - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $ac_cs_root.s$ac_sed_frag" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $ac_cs_root.s$ac_sed_frag" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -EOF -cat >>$CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file" | sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file" | sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo "$ac_file" | sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo "$ac_dir_suffix" | sed 's%/[^/]*%../%g'` - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots | sed 's%/$%%'`; fi ;; - [\\/]* | ?:[\\/]* ) - srcdir="$ac_given_srcdir$ac_dir_suffix"; - top_srcdir=$ac_given_srcdir ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - - case "$ac_given_INSTALL" in - [\\/$]* | ?:[\\/]* ) INSTALL="$ac_given_INSTALL" ;; - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in | - sed 's%.*/%%'` by configure." - case "$ac_file" in - *[Mm]akefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - # Don't redirect the output to AC_FILE directly: use `mv' so that updating - # is atomic, and doesn't need trapping. - ac_file_inputs=`echo "$ac_file_in" | - sed -e "s%:% $ac_given_srcdir/%g;s%^%$ac_given_srcdir/%"` - for ac_file_input in $ac_file_inputs; - do - test -f "$ac_file_input" || - { echo "configure: error: cannot find input file \`$ac_file_input'" 1>&2; exit 1; } - done -EOF -cat >>$CONFIG_STATUS <>$CONFIG_STATUS <<\EOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s%@configure_input@%$configure_input%;t t -s%@srcdir@%$srcdir%;t t -s%@top_srcdir@%$top_srcdir%;t t -s%@INSTALL@%$INSTALL%;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$ac_cs_root.out - mv $ac_cs_root.out $ac_file - -fi; done -rm -f $ac_cs_root.s* -EOF -cat >>$CONFIG_STATUS <<\EOF - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$%\1#\2' -ac_dC=' ' -ac_dD='%;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$%\1#\2define\3' -ac_uC=' ' -ac_uD='%;t' - -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file" | sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file" | sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - echo creating $ac_file - - rm -f $ac_cs_root.frag $ac_cs_root.in $ac_cs_root.out - ac_file_inputs=`echo "$ac_file_in" | - sed -e "s%:% $ac_given_srcdir/%g;s%^%$ac_given_srcdir/%"` - for ac_file_input in $ac_file_inputs; - do - test -f "$ac_file_input" || - { echo "configure: error: cannot find input file \`$ac_file_input'" 1>&2; exit 1; } - done - # Remove the trailing spaces. - sed -e 's/[ ]*$//' $ac_file_inputs >$ac_cs_root.in - -EOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -ac_cs_root=conftest -cat >$ac_cs_root.hdr <<\EOF -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -t clear -: clear -s%^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$%${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD}%gp -t cleanup -s%^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -: cleanup -EOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC_DEFINE to be honored. -uniq confdefs.h | sed -n -f $ac_cs_root.hdr >conftest.defines -sed -e 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f $ac_cs_root.hdr - -# This sed command replaces #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. -cat >>conftest.undefs <<\EOF -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -EOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if egrep "^[ ]*#[ ]*define" $ac_cs_root.in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $ac_cs_root.frag. - echo ' cat >$ac_cs_root.frag <>$CONFIG_STATUS - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $ac_cs_root.frag $ac_cs_root.in >$ac_cs_root.out - rm -f $ac_cs_root.in - mv $ac_cs_root.out $ac_cs_root.in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # egrep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $ac_cs_root.frag. - echo ' cat >$ac_cs_root.frag <>$CONFIG_STATUS - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $ac_cs_root.frag $ac_cs_root.in >$ac_cs_root.out - rm -f $ac_cs_root.in - mv $ac_cs_root.out $ac_cs_root.in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\EOF - rm -f $ac_cs_root.frag $ac_cs_root.h - echo "/* $ac_file. Generated automatically by configure. */" >$ac_cs_root.h - cat $ac_cs_root.in >>$ac_cs_root.h - rm -f $ac_cs_root.in - if cmp -s $ac_file $ac_cs_root.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f $ac_cs_root.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo "$ac_file" | sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv $ac_cs_root.h $ac_file - fi -fi; done -EOF -cat >>$CONFIG_STATUS <<\EOF - -# -# CONFIG_LINKS section. -# -srcdir=$ac_given_srcdir - -for ac_file in : $CONFIG_LINKS; do if test "x$ac_file" != x:; then - ac_dest=`echo "$ac_file" | sed 's%:.*%%'` - ac_source=`echo "$ac_file" | sed 's%[^:]*:%%'` - - echo "copying $srcdir/$ac_source to $ac_dest" - - if test ! -r $srcdir/$ac_source; then - { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; } - fi - rm -f $ac_dest - - # Make relative symlinks. - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dest_dir=`echo $ac_dest | sed 's%/[^/][^/]*$%%'` - if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then - # The dest file is in a subdirectory. - test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" - ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dest_dir_suffix. - ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` - else - ac_dest_dir_suffix= ac_dots= - fi - - case "$srcdir" in - [\\/$]* | ?:[\\/]* ) ac_rel_source="$srcdir/$ac_source" ;; - *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; - esac - - # Note: Dodgy local mods to 'make things work' in an environment (cygwin) - # that supports symlinks (through silly hack) using tools that don't - # understand them (mingw). The end sometimes justifies the means, son. - # - # Make a symlink if possible; otherwise try a hard link. - #if ln -s $ac_rel_source $ac_dest 2>/dev/null || - # ln $srcdir/$ac_source $ac_dest; then : - # - # Note: If the -p offends your 'cp', just drop it; no harm done, you'll just - # get more recompilations. - # - if cp -p $srcdir/$ac_source $ac_dest; then : - else - { echo "configure: error: cannot copy $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; } - fi -fi; done -EOF -cat >>$CONFIG_STATUS <<\EOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in .. $CONFIG_COMMANDS; do if test "x$ac_file" != x..; then - ac_dest=`echo "$ac_file" | sed 's%:.*%%'` - ac_source=`echo "$ac_file" | sed 's%[^:]*:%%'` - - case "$ac_dest" in - default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; - esac -fi;done -EOF - -cat >>$CONFIG_STATUS <<\EOF - -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -trap 'exit 1' 1 2 15 - -test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 diff --git a/rts/gmp/configure.in b/rts/gmp/configure.in deleted file mode 100644 index 18f610f..0000000 --- a/rts/gmp/configure.in +++ /dev/null @@ -1,950 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. - - -dnl Copyright (C) 1996, 1997, 1998, 1999, 2000 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 the GNU Lesser General Public License as published -dnl by the Free Software Foundation; either version 2.1 of the License, or (at -dnl your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will 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 -dnl You should have received a copy of the GNU Lesser General Public License -dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -AC_REVISION($Revision: 1.8 $)dnl -AC_PREREQ(2.14)dnl -AC_INIT(gmp-impl.h) - -dnl Check system. -AC_CANONICAL_SYSTEM - -dnl Automake -AM_INIT_AUTOMAKE(gmp, GMP_VERSION) -AM_CONFIG_HEADER(config.h:config.in) -AM_MAINTAINER_MODE - -dnl GMP specific -GMP_INIT(config.m4) - - -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, - [./configure --enable-assert option, to enable some ASSERT()s]) -fi - - -AC_ARG_ENABLE(alloca, -AC_HELP_STRING([--enable-alloca],[use alloca for temp space [default=yes]]), -[case "${enableval}" in -yes|no) ;; -*) AC_MSG_ERROR([bad value ${enableval} for --enable-alloca, need yes or no]) ;; -esac], -[enable_alloca=yes]) - -if test "$enable_alloca" = "no"; then - AC_DEFINE(USE_STACK_ALLOC,1, - [./configure --disable-alloca option, to use stack-alloc.c, not alloca]) -fi - - -AC_ARG_ENABLE(fft, -AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=no]]), -[case "${enableval}" in -yes|no) ;; -*) AC_MSG_ERROR([bad value ${enableval} for --enable-fft, need yes or no]) ;; -esac], -[enable_fft=no]) - -if test "$enable_fft" = "yes"; then - AC_DEFINE(WANT_FFT,1, - [./configure --enable-fft option, to enable FFTs for multiplication]) -fi - - -AC_ARG_ENABLE(mpbsd, -AC_HELP_STRING([--enable-mpbsd],[build Berkley MP compatibility library [default=no]]), -[case "${enableval}" in -yes|no) ;; -*) AC_MSG_ERROR([bad value ${enableval} for --enable-mpbsd, need yes or no]) ;; -esac], -[enable_mpbsd=no]) -AM_CONDITIONAL(WANT_MPBSD, test "$enable_mpbsd" = "yes") - - -AC_ARG_ENABLE(mpfr, -AC_HELP_STRING([--enable-mpfr],[build MPFR [default=no]]), -[case "${enableval}" in -yes|no) ;; -*) AC_MSG_ERROR([bad value ${enableval} for --enable-mpfr, need yes or no]) ;; -esac], -[enable_mpfr=no]) -AM_CONDITIONAL(WANT_MPFR, test "$enable_mpfr" = "yes") - - -dnl Switch on OS and determine what compiler to use. -dnl -dnl os_64bit Set to "yes" if OS is 64-bit capable. -dnl FIXME: Rename to `check_64bit_compiler'! -dnl cclist List of compilers, best first. -dnl gmp_cflags_{cc} Flags for compiler named {cc}. -dnl gmp_cflags64_{cc} Flags for compiler named {cc} for 64-bit code. -dnl gmp_optcflags_{cc} Optional compiler flags. -dnl gmp_xoptcflags_{cc} Exclusive optional compiler flags. -dnl -os_64bit="no" -cclist="gcc cc" # FIXME: Prefer c89 to cc. -gmp_cflags_gcc="-g -O2" -gmp_cflags64_gcc="-g -O2" -gmp_cflags_cc="-g" -gmp_cflags64_cc="-g" - -case "$target" in - # Alpha - alpha*-cray-unicos*) - # Don't perform any assembly syntax tests on this beast. - gmp_no_asm_syntax_testing=yes - cclist=cc - gmp_cflags_cc="$gmp_cflags_cc -O" - ;; - alpha*-*-osf*) - flavour=`echo $target_cpu | sed 's/^alpha//g'` - if test -n "$flavour"; then - case $flavour in # compilers don't seem to understand `ev67' and such. - ev6? | ev7*) flavour=ev6;; - esac - gmp_optcflags_gcc="-mcpu=$flavour" - # FIXME: We shouldn't fail fatally if none of these work, but that's - # how xoptcflags work and we don't have any other mechanism right now. - # Why do we need this here and not for alpha*-*-* below? - gmp_xoptcflags_gcc="-Wa,-arch,${flavour} -Wa,-m${flavour}" - gmp_optcflags_cc="-arch $flavour -tune $flavour" - fi - ;; - alpha*-*-*) - cclist="gcc" - flavour=`echo $target_cpu | sed 's/^alpha//g'` - if test -n "$flavour"; then - case $flavour in - ev6? | ev7*) flavour=ev6;; - esac - gmp_optcflags_gcc="-mcpu=$flavour" - fi - ;; - # Cray vector machines. This must come after alpha* so that we can - # recognize present and future vector processors with a wildcard. - *-cray-unicos*) - # Don't perform any assembly syntax tests on this beast. - gmp_no_asm_syntax_testing=yes - cclist=cc - # Don't inherit default gmp_cflags_cc value; it comes with -g which - # disables all optimization on Cray vector systems - gmp_cflags_cc="-O" - ;; - - # AMD and Intel x86 configurations - [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) - # Rumour has it -O2 used to give worse register allocation than just -O. - gmp_cflags_gcc="-g -O -fomit-frame-pointer" - - case "${target}" in - i386*-*-*) gmp_optcflags_gcc="-mcpu=i386 -march=i386";; - i486*-*-*) gmp_optcflags_gcc="-mcpu=i486 -march=i486";; - i586*-*-* | pentium-*-* | pentiummmx-*-*) - gmp_optcflags_gcc="-mcpu=pentium -march=pentium";; - - # -march=pentiumpro not used because mpz/powm.c (swox cvs rev 1.4) - # tickles a bug in gcc 2.95.2 (believed fixed in 2.96). - [i686*-*-* | pentiumpro-*-* | pentium[23]-*-*]) - gmp_optcflags_gcc="-mcpu=pentiumpro";; - - k6*-*-*) gmp_optcflags_gcc="-mcpu=k6 -march=k6";; - - # Athlon instruction costs are close to p6: 3 cycle load latency, 4-6 - # cycle mul, 40 cycle div, pairable adc, ... - # FIXME: Change this when gcc gets something specific for Athlon. - # -march=pentiumpro not used, per i686 above. - athlon-*-*) gmp_optcflags_gcc="-mcpu=pentiumpro";; - esac - ;; - - # Sparc - [ultrasparc*-*-solaris2.[7-9] | sparcv9-*-solaris2.[7-9]]) - os_64bit=yes - gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" - gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" - gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - gmp_cflags64_cc="-xtarget=native -xarch=v9 -xO4" - ;; - sparc64-*-linux*) - # Need to think more about the options passed here. This isn't good for - # some sparc64 linux distros, since we end up not optimizing when all the - # options below fail. - os_64bit=yes - gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9" - gmp_cflags_gcc="$gmp_cflags_gcc -m32" - gmp_xoptflags_gcc="-mcpu=ultrasparc -mvis" - ;; - ultrasparc*-*-* | sparcv9-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus" - gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - ;; - sparcv8*-*-solaris2.* | microsparc*-*-solaris2.*) - gmp_cflags_gcc="$gmp_cflags_gcc" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4" - ;; - sparcv8*-*-* | microsparc*-*-*) # SunOS, Linux, *BSD - cclist="gcc acc cc" - gmp_cflags_gcc="$gmp_cflags_gcc" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_acc="-g -O2 -cg92" - gmp_cflags_cc="-O2" # FIXME: Flag for v8? - ;; - supersparc*-*-solaris2.*) - gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4 -DSUPERSPARC" - ;; - supersparc*-*-*) # SunOS, Linux, *BSD - cclist="gcc acc cc" - gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC" - gmp_xoptcflags_gcc="-mcpu=v8 -mv8" - gmp_cflags_acc="-g -O2 -cg92 -DSUPERSPARC" - gmp_cflags_cc="-O2 -DSUPERSPARC" # FIXME: Flag for v8? - ;; - *sparc*-*-*) - cclist="gcc acc cc" - gmp_cflags_acc="-g -O2" - gmp_cflags_cc="-g -O2" - ;; - - # POWER/PowerPC - powerpc64-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -maix64 -mpowerpc64" - gmp_cflags_xlc="-g -O2 -q64 -qtune=pwr3" - ;; - powerpc*-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" - gmp_cflags_xlc="$gmp_cflags_cc -qarch=ppc -O2" - ;; - power-*-aix*) - cclist="gcc xlc" - gmp_cflags_gcc="$gmp_cflags_gcc -mpower" - gmp_cflags_xlc="$gmp_cflags_cc -qarch=pwr -O2" - ;; - powerpc64*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc64" - AC_DEFINE(_LONG_LONG_LIMB) dnl FIXME: Remove. - ;; - powerpc-apple-darwin* | powerpc-apple-macosx*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc -traditional-cpp" - ;; - powerpc*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc" - ;; - - # MIPS - mips-sgi-irix6.*) - os_64bit=yes - gmp_cflags64_gcc="-g -O2 -mabi=n32" - gmp_cflags64_cc="$gmp_cflags64_cc -O2 -n32" - ;; - - # Motorola 68k family - m88110*-*-*) - gmp_cflags_gcc="-g -O -m88110" dnl FIXME: Use `-O2'? - ;; - m68*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" - ;; - - # HP - hppa1.0*-*-*) - cclist="gcc c89 cc" - gmp_cflags_c89="$gmp_cflags_cc +O2" - gmp_cflags_cc="$gmp_cflags_cc +O2" - ;; - hppa2.0w*-*-*) - cclist="c89 cc" - gmp_cflags_c89="+DD64 +O3" - gmp_cflags_cc="+DD64 +O3" - ;; - hppa2.0*-*-*) - os_64bit=yes - cclist="gcc c89 cc" - gmp_cflags64_gcc="$gmp_cflags64_gcc -mWHAT -D_LONG_LONG_LIMB" - # +O2 to cc triggers bug in mpz/powm.c (1.4) - gmp_cflags64_c89="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" - gmp_cflags64_cc="+DA2.0 +e +O3 -D_LONG_LONG_LIMB" - gmp_cflags_c89="$gmp_cflags_cc +O2" - gmp_cflags_cc="$gmp_cflags_cc +O2" - ;; - - # VAX - vax*-*-*) - gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer" - ;; - - # Fujitsu - [f30[01]-fujitsu-sysv*]) - cclist="gcc vcc" - gmp_cflags_vcc="-g" # FIXME: flags for vcc? - ;; -esac - -case "${target}" in - *-*-mingw32) gmp_cflags_gcc="$gmp_cflags_gcc -mno-cygwin";; -esac - -dnl Check for programs needed by macros for finding compiler. -dnl More programs are checked for below, when a compiler is found. -AC_PROG_NM dnl Macro from Libtool. -# nm on 64-bit AIX needs to know the object file format -case "$target" in - powerpc64*-*-aix*) - NM="$NM -X 64" - ;; -esac - -# Save CFLAGS given on command line. -gmp_user_CFLAGS="$CFLAGS" - -if test -z "$CC"; then - # Find compiler. - GMP_PROG_CC_FIND($cclist, $os_64bit) - - # If 64-bit OS and we have a 64-bit compiler, use it. - if test -n "$os_64bit" && test -n "$CC64"; then - CC=$CC64 - CFLAGS=$CFLAGS64 - else - eval CFLAGS=\$gmp_cflags_$CC - fi - - # Try compiler flags that may work with only some compiler versions. - # gmp_optcflags: All or nothing. - eval optcflags=\$gmp_optcflags_$CC - if test -n "$optcflags"; then - CFLAGS_save="$CFLAGS" - CFLAGS="$CFLAGS $optcflags" - AC_MSG_CHECKING([whether $CC accepts $optcflags]) - AC_LANG_C - AC_TRY_COMPILER([int main(){return(0);}], optok, cross) - if test "$optok" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - CFLAGS="$CFLAGS_save" - fi - fi - # gmp_xoptcflags: First is best, one has to work. - eval xoptcflags=\$gmp_xoptcflags_$CC - if test -n "$xoptcflags"; then - gmp_found="no" - for xopt in $xoptcflags; do - CFLAGS_save="$CFLAGS" - CFLAGS="$CFLAGS $xopt" - AC_MSG_CHECKING([whether $CC accepts $xopt]) - AC_LANG_C - AC_TRY_COMPILER([int main(){return(0);}], optok, cross) - if test "$optok" = "yes"; then - AC_MSG_RESULT([yes]) - gmp_found="yes" - break - else - AC_MSG_RESULT([no]) - CFLAGS="$CFLAGS_save" - fi - done - if test "$gmp_found" = "no"; then - echo ["$0: fatal: need a compiler that understands one of $xoptcflags"] - exit 1 - fi - fi -fi - -# Restore CFLAGS given on command line. -# FIXME: We've run through quite some unnecessary code looking for a -# nice compiler and working flags for it, just to spoil that with user -# supplied flags. -test -n "$gmp_user_CFLAGS" && CFLAGS="$gmp_user_CFLAGS" - -# Select chosen compiler. -GMP_PROG_CC_SELECT - -# How to assemble. -CCAS="$CC -c" -AC_SUBST(CCAS) - -dnl Checks for programs. -dnl -------------------- -AC_PROG_CPP -AC_PROG_INSTALL -AC_PROG_LN_S -GMP_PROG_M4 -AC_CHECK_PROG(AR, ar, ar) -# ar on AIX needs to know the object file format -case "$target" in - powerpc64*-*-aix*) - AR="$AR -X 64" - ;; -esac -dnl FIXME: Find good ld? /usr/ucb/ld on Solaris won't work. - -dnl Checks for assembly syntax. -if test "$gmp_no_asm_syntax_testing" != "yes"; then - GMP_CHECK_ASM_TEXT - GMP_CHECK_ASM_DATA - GMP_CHECK_ASM_GLOBL - GMP_CHECK_ASM_LABEL_SUFFIX - GMP_CHECK_ASM_TYPE - GMP_CHECK_ASM_SIZE - GMP_CHECK_ASM_LSYM_PREFIX - GMP_CHECK_ASM_W32 - GMP_CHECK_ASM_UNDERSCORE(underscore=yes, underscore=no) - GMP_CHECK_ASM_ALIGN_LOG(asm_align=log, asm_align=nolog) -fi - -dnl FIXME: Check for FPU and set `floating_point' appropriately. - -dnl ======================================== -dnl Configuring mpn. -dnl ---------------------------------------- -dnl Set the following target specific variables: -dnl path where to search for source files -dnl family processor family (Needed for building -dnl asm-syntax.h for now. FIXME: Remove.) -dnl extra_functions extra functions - -family=generic - -case ${target} in - arm*-*-*) - path="arm" - ;; - [sparcv9*-*-solaris2.[789]* | sparc64*-*-solaris2.[789]* | ultrasparc*-*-solaris2.[789]*]) - if test -n "$CC64" - then path="sparc64" - else path="sparc32/v9 sparc32/v8 sparc32" - fi - ;; - sparc64-*-linux*) - if test -n "$CC64" - then path="sparc64" - else path="sparc32/v9 sparc32/v8 sparc32" - fi - ;; - sparcv8*-*-* | microsparc*-*-*) - path="sparc32/v8 sparc32" - if test x${floating_point} = xno - then extra_functions="udiv_nfp" - else extra_functions="udiv_fp" - fi - ;; - sparcv9*-*-* | ultrasparc*-*-*) - path="sparc32/v9 sparc32/v8 sparc32" - extra_functions="udiv_fp" - ;; - supersparc*-*-*) - path="sparc32/v8/supersparc sparc32/v8 sparc32" - extra_functions="udiv" - ;; - sparc*-*-*) path="sparc32" - if test x${floating_point} = xno - then extra_functions="udiv_nfp" - else extra_functions="udiv_fp" - fi - ;; - hppa7000*-*-*) - path="hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd" - ;; - hppa1.0*-*-*) - path="hppa" - extra_functions="udiv_qrnnd" - ;; - hppa2.0w-*-*) - path="pa64w" - extra_functions="umul_ppmm udiv_qrnnd" - ;; - hppa2.0*-*-*) - if test -n "$CC64"; then - path="pa64" - extra_functions="umul_ppmm udiv_qrnnd" - # We need to use the system compiler, or actually the system assembler, - # since GAS has not been ported to understand the 2.0 instructions. - CCAS="$CC64 -c" - else - # FIXME: path should be "hppa/hppa2_0 hppa/hppa1_1 hppa" - path="hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd" - fi - ;; - hppa*-*-*) #assume pa7100 - path="hppa/hppa1_1/pa7100 hppa/hppa1_1 hppa" - extra_functions="udiv_qrnnd";; - [f30[01]-fujitsu-sysv*]) - path=fujitsu;; - alphaev6*-*-*) path="alpha/ev6 alpha"; extra_functions="invert_limb cntlz";; - alphaev5*-*-*) path="alpha/ev5 alpha"; extra_functions="invert_limb cntlz";; - alpha*-*-*) path="alpha"; extra_functions="invert_limb cntlz";; - # Cray vector machines. This must come after alpha* so that we can - # recognize present and future vector processors with a wildcard. - *-cray-unicos*) - path="cray" - extra_functions="mulww";; - am29000*-*-*) path="a29k";; - a29k*-*-*) path="a29k";; - - # AMD and Intel x86 configurations - - [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) - gmp_m4postinc="x86/x86-defs.m4" - extra_functions="udiv umul" - CALLING_CONVENTIONS_OBJS="x86call.o x86check.o" - - GMP_CHECK_ASM_SHLDL_CL( - [GMP_DEFINE(WANT_SHLDL_CL,1)], - [GMP_DEFINE(WANT_SHLDL_CL,0)]) - GMP_CHECK_ASM_ALIGN_FILL_0x90 - - # the CPUs below wanting to know about mmx - case ${target} in - [pentiummmx-*-* | pentium[23]-*-* | k6*-*-* | athlon-*-*]) - GMP_CHECK_ASM_MMX(tmp_mmx=yes, tmp_mmx=no) - ;; - esac - - # default for anything not otherwise mentioned - path="x86" - - case ${target} in - [i[34]86*-*-*]) - path="x86" - ;; - k5*-*-*) - # don't know what best suits k5 - path="x86" - ;; - i586*-*-* | pentium-*-*) - path="x86/pentium x86" - ;; - pentiummmx-*-*) - path="x86/pentium x86" - if test "$tmp_mmx" = yes; then - path="x86/pentium/mmx $path" - fi - ;; - i686*-*-* | pentiumpro-*-*) - path="x86/p6 x86" - ;; - pentium2-*-*) - path="x86/p6 x86" - # The pentium/mmx lshift and rshift are good on p6 and can be used - # until there's something specific for p6. - if test "$tmp_mmx" = yes; then - path="x86/p6/mmx x86/pentium/mmx $path" - fi - ;; - pentium3-*-*) - path="x86/p6 x86" - # The pentium/mmx lshift and rshift are good on p6 and can be used - # until there's something specific for p6. - if test "$tmp_mmx" = yes; then - path="x86/p6/p3mmx x86/p6/mmx x86/pentium/mmx $path" - fi - ;; - [k6[23]*-*-*]) - path="x86/k6 x86" - if test "$tmp_mmx" = yes; then - path="x86/k6/k62mmx x86/k6/mmx $path" - fi - ;; - k6*-*-*) - path="x86/k6 x86" - if test "$tmp_mmx" = yes; then - path="x86/k6/mmx $path" - fi - ;; - athlon-*-*) - path="x86/k7 x86" - if test "$tmp_mmx" = yes; then - path="x86/k7/mmx $path" - fi - ;; - esac - ;; - - - i960*-*-*) path="i960";; - - ia64*-*-*) path="ia64";; - -# Motorola 68k configurations. Let m68k mean 68020-68040. - [m680[234]0*-*-* | m68k*-*-* | \ - m68*-next-nextstep*]) # Nexts are at least '020 - path="m68k/mc68020 m68k" - family=m68k - ;; - m68000*-*-*) - path="m68k" - family=m68k - ;; - - m88k*-*-* | m88k*-*-*) path="m88k";; - m88110*-*-*) path="m88k/mc88110 m88k";; - ns32k*-*-*) path="ns32k";; - - pyramid-*-*) path="pyr";; - - ppc601-*-*) path="power powerpc32";; - powerpc64*-*-*) path="powerpc64";; - powerpc*-*-*) path="powerpc32";; - rs6000-*-* | power-*-* | power2-*-*) - path="power" - extra_functions="udiv_w_sdiv" - ;; - - sh-*-*) path="sh";; - sh2-*-*) path="sh/sh2 sh";; - - [mips[34]*-*-*]) path="mips3";; - mips*-*-irix6*) path="mips3";; - mips*-*-*) path="mips2";; - - vax*-*-*) path="vax"; extra_functions="udiv_w_sdiv";; - - z8000x*-*-*) path="z8000x"; extra_functions="udiv_w_sdiv";; - z8000*-*-*) path="z8000"; extra_functions="udiv_w_sdiv";; - - clipper*-*-*) path="clipper";; -esac - -AC_SUBST(CALLING_CONVENTIONS_OBJS) -if test -n "$CALLING_CONVENTIONS_OBJS"; then - AC_DEFINE(HAVE_CALLING_CONVENTIONS,1, - [Define if mpn/tests has calling conventions checking for the CPU]) -fi - - -case ${target} in - [i[5-8]86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*]) - # rdtsc is in pentium and up, not in i386 and i486 - SPEED_CYCLECOUNTER_OBJS=pentium.lo - ;; - alpha*-*-*) - SPEED_CYCLECOUNTER_OBJS=alpha.lo - ;; - sparcv9*-*-* | ultrasparc*-*-* | sparc64*-*-*) - SPEED_CYCLECOUNTER_OBJS=sparcv9.lo - ;; - hppa2*-*-*) - SPEED_CYCLECOUNTER_OBJS=hppa2.lo - ;; - hppa*-*-*) - SPEED_CYCLECOUNTER_OBJS=hppa.lo - ;; -esac - -AC_SUBST(SPEED_CYCLECOUNTER_OBJS) - -if test -n "$SPEED_CYCLECOUNTER_OBJS" -then - AC_DEFINE(HAVE_SPEED_CYCLECOUNTER, 1, - [Define if a speed_cyclecounter exists (for the tune programs)]) -fi - - -dnl Extensions for executable and object files. -dnl ------------------------------------------- -AC_EXEEXT -AC_OBJEXT - -dnl Use Libtool. -dnl ------------ -dnl FIXME: Shared libs seem to fail on aix4.3. -dnl FIXME: Should invoke [AC_DISABLE_SHARED], but m4 recurses to death. -case "$target" in - [*-*-aix4.[3-9]*]) enable_shared=no ;; -esac -AC_PROG_LIBTOOL - -dnl Checks for libraries. -dnl --------------------- -AC_CHECK_DECLS((optarg)) - -dnl Checks for header files. -dnl ------------------------ -AC_HEADER_STDC -AC_CHECK_HEADERS(getopt.h unistd.h sys/sysctl.h sys/time.h) - -dnl Checks for typedefs, structures, and compiler characteristics. -dnl -------------------------------------------------------------- -AC_CHECK_TYPES((void)) -AC_C_STRINGIZE - -dnl Checks for library functions. -dnl ----------------------------- -dnl Most of these are only for the benefit of supplementary programs. The -dnl library itself doesn't use anything weird. -dnl AC_FUNC_MEMCMP -dnl AC_TYPE_SIGNAL -dnl AC_CHECK_FUNCS(strtol) -AC_CHECK_FUNCS(getopt_long getpagesize popen processor_info strtoul sysconf sysctlbyname) - -dnl Trick automake into thinking we've run AM_C_PROTOTYPES which it wants -dnl for ansi2knr, and instead use our own test. (It's only a warning -dnl automake prints, but it's good to suppress it.) -ifelse(0,1,[ -AM_C_PROTOTYPES -]) -GMP_C_ANSI2KNR - - -dnl Set `syntax' to one of , "mit", "elf", "aix", "macho". -syntax= -# For now, we use the old switch for setting syntax. -# FIXME: Remove when conversion to .asm is completed. -changequote(,)dnl -case "${target}" in - m680[234]0*-*-linuxaout* | m68k*-*-linuxaout* | \ - m68k-next-nextstep* | \ - m68000*-*-*) - syntax=mit - ;; - m680[234]0*-*-linux* | m68k*-*-linux*) - syntax=elf - ;; - m680[234]0*-*-* | m68k*-*-*) - syntax=mit - ;; -esac -changequote([,])dnl - -dnl ---------------------------------------- -# Now build an asm-syntax.h file for targets that include that from the -# assembly files. -# FIXME: Remove when conversion to .asm is completed. -case "${family}-${underscore}-${asm_align}-${syntax}" in - m68k-yes-log-mit) - echo '#define MIT_SYNTAX' >asm-syntax.h - cat $srcdir/mpn/underscore.h >>asm-syntax.h - echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; - m68k-no-nolog-elf) - echo '#define ELF_SYNTAX' >asm-syntax.h - echo '#define C_SYMBOL_NAME(name) name' >>asm-syntax.h - echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;; -esac - - -# The pattern here tests for an absolute path the same way as -# _AC_OUTPUT_FILES in autoconf acgeneral.m4. -GMP_DEFINE_RAW(["dnl CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir"]) -case "$srcdir" in -[[\\/]]* | ?:[[\\/]]* ) - GMP_DEFINE_RAW(["define(,<\`$srcdir'>)"]) ;; -*) GMP_DEFINE_RAW(["define(,<\`../$srcdir'>)"]) ;; -esac - -GMP_DEFINE_RAW(["include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"], POST) - -# Must be after asm-defs.m4 -GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_TARGET_CPU_$target_cpu')", POST) - - -dnl config.m4 post-includes -dnl ----------------------- -dnl (Note x86 post include set with $path above.) -changequote(,)dnl -case "$target" in - alpha*-cray-unicos*) - gmp_m4postinc="alpha/unicos.m4" - ;; - alpha*-*-*) - gmp_m4postinc="alpha/default.m4" - ;; - power*-*-*) - case "$target" in - *-*-mach* | *-*-rhapsody* | *-*-nextstep* | *-*-darwin* | *-*-macosx*) - ;; # these use non-conventional assembly syntax. - powerpc64-*-aix*) - gmp_m4postinc="powerpc32/regmap.m4 powerpc64/aix.m4" - ;; - *-*-aix*) - gmp_m4postinc="powerpc32/regmap.m4 powerpc32/aix.m4" - ;; - *) - gmp_m4postinc="powerpc32/regmap.m4" - ;; - esac - ;; -esac -changequote([, ])dnl - -for tmp_f in $gmp_m4postinc; do - GMP_DEFINE_RAW(["include_mpn(\`$tmp_f')"], POST) -done - - -# Set up `gmp_links'. It's a list of link:file pairs that configure will -# process to create link -> file. -gmp_links= - -# If the user specified `MPN_PATH', use that instead of the path we've -# come up with. -if test -z "$MPN_PATH"; then - path="$path generic" -else - path="$MPN_PATH" -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_ to get them to generate the right code.) - -# FIXME: udiv and umul aren't in $gmp_mpn_functions_optional yet since -# there's some versions of those files which should be checked for bit -# rot first. Put them in $extra_functions for each target for now, -# change to standard optionals when all are ready. - -# Note: The following lines defining $gmp_mpn_functions_optional -# and $gmp_mpn_functions are parsed by the "macos/configure" -# Perl script. So if you change the lines in a major way -# make sure to run and examine the output from -# -# % (cd macos; perl configure) - -gmp_mpn_functions_optional="copyi copyd com_n \ - and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n" - -gmp_mpn_functions="${extra_functions} inlines add_n sub_n mul_1 addmul_1 \ - submul_1 lshift rshift diveby3 divrem divrem_1 divrem_2 \ - mod_1 mod_1_rs pre_mod_1 dump \ - mul mul_fft mul_n mul_basecase sqr_basecase random \ - random2 sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp perfsqr \ - bdivmod gcd_1 gcd gcdext tdiv_qr bz_divrem_n sb_divrem_mn jacbase \ - $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="mpn/mp_bases.lo" - -for tmp_fn in ${gmp_mpn_functions} ; do - [rm -f mpn/${tmp_fn}.[Ssc] mpn/${tmp_fn}.asm] - - # functions that can be provided by multi-function files - tmp_mulfunc= - case $tmp_fn in - add_n|sub_n) tmp_mulfunc="aors_n" ;; - addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;; - 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" ;; - 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 - found=yes - - mpn_objects="$mpn_objects ${tmp_fn}.lo" - mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_fn}.lo" - gmp_links="$gmp_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext" - - # duplicate AC_DEFINEs are harmless, so it doesn't matter - # that multi-function files get grepped here repeatedly - 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}) - done - - 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 - -# Create link for gmp-mparam.h. -for tmp_dir in $path ; do - rm -f gmp-mparam.h - if test -f $srcdir/mpn/${tmp_dir}/gmp-mparam.h ; then - gmp_links="$gmp_links gmp-mparam.h:mpn/${tmp_dir}/gmp-mparam.h" - - # Copy any KARATSUBA_SQR_THRESHOLD in gmp-mparam.h to config.m4. - # Some versions of sqr_basecase.asm use this. - tmp_gmp_karatsuba_sqr_threshold="`sed -n 's/^#define KARATSUBA_SQR_THRESHOLD[ ]*\([0-9][0-9]*\).*$/\1/p' $srcdir/mpn/${tmp_dir}/gmp-mparam.h`" - if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then - GMP_DEFINE_RAW(["define(,<$tmp_gmp_karatsuba_sqr_threshold>)"]) - fi - - break - fi -done - -# Dig out the links from `gmp_links' for inclusion in DISTCLEANFILES. -gmp_srclinks= -for f in $gmp_links; do - gmp_srclinks="$gmp_srclinks `echo $f | sed 's/\(.*\):.*/\1/'`" -done - -AC_SUBST(mpn_objects) -AC_SUBST(mpn_objs_in_libgmp) -AC_SUBST(gmp_srclinks) - -dnl ---------------------------------------- -dnl Make links. -AC_CONFIG_LINKS($gmp_links) - -dnl Create config.m4. -GMP_FINISH - -dnl Create Makefiles -dnl FIXME: Upcoming version of autoconf/automake may not like broken lines. -AC_OUTPUT(Makefile mpz/Makefile mpn/Makefile) diff --git a/rts/gmp/depcomp b/rts/gmp/depcomp deleted file mode 100644 index 7906096..0000000 --- a/rts/gmp/depcomp +++ /dev/null @@ -1,269 +0,0 @@ -#! /bin/sh - -# depcomp - compile a program generating dependencies as side-effects -# Copyright (C) 1999 Free Software Foundation, Inc. - -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# Originally written by Alexandre Oliva . - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi -# `libtool' can also be set to `yes' or `no'. - -depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - if "$@" -Wp,"$gccflag$tmpdepfile"; then : - else - stat=$? - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed 's/^[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -dashmd) - # The Java front end to gcc doesn't run cpp, so we can't use the -Wp - # trick. Instead we must use -M and then rename the resulting .d - # file. This is also the case for older versions of gcc, which - # don't implement -Wp. - if "$@" -MD; then : - else - stat=$? - rm -f FIXME - exit $stat - fi - FIXME: rewrite the file - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wc,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - stat=$? - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed 's/^[^:]*: / /' < "$tmpdepfile" >> "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the proprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - test -z "$dashmflag" && dashmflag=-M - ( IFS=" " - case " $* " in - *" --mode=compile "*) # this is libtool, let us make it quiet - for arg - do # cycle over the arguments - case "$arg" in - "--mode=compile") - # insert --quiet before "--mode=compile" - set fnord "$@" --quiet - shift # fnord - ;; - esac - set fnord "$@" "$arg" - shift # fnord - shift # "$arg" - done - ;; - esac - "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - # X makedepend - ( - shift - cleared=no - for arg in "$@"; do - case $cleared in no) - set ""; shift - cleared=yes - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift;; - -*) - ;; - *) - set fnord "$@" "$arg"; shift;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tail +3 "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the proprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - ( IFS=" " - case " $* " in - *" --mode=compile "*) - for arg - do # cycle over the arguments - case "$arg" in - "--mode=compile") - # insert --quiet before "--mode=compile" - set fnord "$@" --quiet - shift # fnord - ;; - esac - set fnord "$@" "$arg" - shift # fnord - shift # "$arg" - done - ;; - esac - "$@" -E | - sed -n '/^# [0-9][0-9]* "\([^"]*\)"/ s::'"$object"'\: \1:p' > "$tmpdepfile" - ) & - proc=$! - "$@" - stat=$? - wait "$proc" - if test "$stat" != 0; then exit $stat; fi - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed < "$tmpdepfile" -e 's/^[^:]*: //' -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 diff --git a/rts/gmp/errno.c b/rts/gmp/errno.c deleted file mode 100644 index 7dd223c..0000000 --- a/rts/gmp/errno.c +++ /dev/null @@ -1,26 +0,0 @@ -/* gmp_errno -- The largest and most complex file in GMP. - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#include "gmp.h" -#include "gmp-impl.h" - -int gmp_errno = 0; diff --git a/rts/gmp/extract-dbl.c b/rts/gmp/extract-dbl.c deleted file mode 100644 index 2d70d9a..0000000 --- a/rts/gmp/extract-dbl.c +++ /dev/null @@ -1,187 +0,0 @@ -/* __gmp_extract_double -- convert from double to array of mp_limb_t. - -Copyright (C) 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#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 -#if __STDC__ -__gmp_extract_double (mp_ptr rp, double d) -#else -__gmp_extract_double (rp, d) - mp_ptr rp; - double d; -#endif -{ - long exp; - unsigned sc; - mp_limb_t manh, manl; - - /* 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 BITS_PER_MP_LIMB >= 32. - 4. This lits is incomplete and misspelled. - */ - - if (d == 0.0) - { - rp[0] = 0; - rp[1] = 0; -#if BITS_PER_MP_LIMB == 32 - rp[2] = 0; -#endif - 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_MP_LIMB == 64 - 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 ((mp_limb_signed_t) manl >= 0); - } -#else - 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 ((mp_limb_signed_t) manh >= 0); - } -#endif - exp -= 1022; /* Remove IEEE bias. */ - } -#else - { - /* Unknown (or known to be non-IEEE) double format. */ - exp = 0; - if (d >= 1.0) - { - if (d * 0.5 == d) - abort (); - - 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 *= MP_BASE_AS_DOUBLE; -#if BITS_PER_MP_LIMB == 64 - manl = d; -#else - manh = d; - manl = (d - manh) * MP_BASE_AS_DOUBLE; -#endif - } -#endif - - sc = (unsigned) exp % BITS_PER_MP_LIMB; - - /* We add something here to get rounding right. */ - exp = (exp + 2048) / BITS_PER_MP_LIMB - 2048 / BITS_PER_MP_LIMB + 1; - -#if BITS_PER_MP_LIMB == 64 - if (sc != 0) - { - rp[1] = manl >> (BITS_PER_MP_LIMB - sc); - rp[0] = manl << sc; - } - else - { - rp[1] = manl; - rp[0] = 0; - exp--; - } -#else - if (sc != 0) - { - rp[2] = manh >> (BITS_PER_MP_LIMB - sc); - rp[1] = (manl >> (BITS_PER_MP_LIMB - sc)) | (manh << sc); - rp[0] = manl << sc; - } - else - { - rp[2] = manh; - rp[1] = manl; - rp[0] = 0; - exp--; - } -#endif - - return exp; -} diff --git a/rts/gmp/gmp-impl.h b/rts/gmp/gmp-impl.h deleted file mode 100644 index 3c7ac26..0000000 --- a/rts/gmp/gmp-impl.h +++ /dev/null @@ -1,1072 +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 (C) 1991, 1993, 1994, 1995, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "config.h" -#include "gmp-mparam.h" -/* #include "longlong.h" */ - -/* When using gcc, make sure to use its builtin alloca. */ -#if ! defined (alloca) && defined (__GNUC__) -#define alloca __builtin_alloca -#define HAVE_ALLOCA 1 -#endif - -/* When using cc, do whatever necessary to allow use of alloca. For many - machines, this means including alloca.h. IBM's compilers need a #pragma - in "each module that needs to use alloca". */ -#if ! defined (alloca) -/* We need lots of variants for MIPS, to cover all versions and perversions - of OSes for MIPS. */ -#if defined (__mips) || defined (MIPSEL) || defined (MIPSEB) \ - || defined (_MIPSEL) || defined (_MIPSEB) || defined (__sgi) \ - || defined (__alpha) || defined (__sparc) || defined (sparc) \ - || defined (__ksr__) -#include -#define HAVE_ALLOCA -#endif -#if defined (_IBMR2) -#pragma alloca -#define HAVE_ALLOCA -#endif -#if defined (__DECC) -#define alloca(x) __ALLOCA(x) -#define HAVE_ALLOCA -#endif -#endif - -#if defined (alloca) -# ifndef HAVE_ALLOCA -#define HAVE_ALLOCA -# endif -#endif - -#if ! defined (HAVE_ALLOCA) || USE_STACK_ALLOC -#include "stack-alloc.h" -#else -#define TMP_DECL(m) -#define TMP_ALLOC(x) alloca(x) -#define TMP_MARK(m) -#define TMP_FREE(m) -#endif - -/* Allocating various types. */ -#define TMP_ALLOC_TYPE(n,type) ((type *) TMP_ALLOC ((n) * sizeof (type))) -#define TMP_ALLOC_LIMBS(n) TMP_ALLOC_TYPE(n,mp_limb_t) -#define TMP_ALLOC_MP_PTRS(n) TMP_ALLOC_TYPE(n,mp_ptr) - - -#if ! defined (__GNUC__) /* FIXME: Test for C++ compilers here, - __DECC understands __inline */ -#define inline /* Empty */ -#endif - -#define ABS(x) (x >= 0 ? x : -x) -#define MIN(l,o) ((l) < (o) ? (l) : (o)) -#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 LIMBS(x) ((x)->_mp_d) -#define EXP(x) ((x)->_mp_exp) -#define PREC(x) ((x)->_mp_prec) -#define ALLOC(x) ((x)->_mp_alloc) - -/* Extra casts because shorts are promoted to ints by "~" and "<<". "-1" - rather than "1" in SIGNED_TYPE_MIN avoids warnings from some compilers - about arithmetic overflow. */ -#define UNSIGNED_TYPE_MAX(type) ((type) ~ (type) 0) -#define UNSIGNED_TYPE_HIGHBIT(type) ((type) ~ (UNSIGNED_TYPE_MAX(type) >> 1)) -#define SIGNED_TYPE_MIN(type) (((type) -1) << (8*sizeof(type)-1)) -#define SIGNED_TYPE_MAX(type) ((type) ~ SIGNED_TYPE_MIN(type)) -#define SIGNED_TYPE_HIGHBIT(type) SIGNED_TYPE_MIN(type) - -#define MP_LIMB_T_MAX UNSIGNED_TYPE_MAX (mp_limb_t) -#define MP_LIMB_T_HIGHBIT UNSIGNED_TYPE_HIGHBIT (mp_limb_t) - -#define MP_SIZE_T_MAX SIGNED_TYPE_MAX (mp_size_t) - -#ifndef ULONG_MAX -#define ULONG_MAX UNSIGNED_TYPE_MAX (unsigned long) -#endif -#define ULONG_HIGHBIT UNSIGNED_TYPE_HIGHBIT (unsigned long) -#define LONG_HIGHBIT SIGNED_TYPE_HIGHBIT (long) -#ifndef LONG_MAX -#define LONG_MAX SIGNED_TYPE_MAX (long) -#endif - -#ifndef USHORT_MAX -#define USHORT_MAX UNSIGNED_TYPE_MAX (unsigned short) -#endif -#define USHORT_HIGHBIT UNSIGNED_TYPE_HIGHBIT (unsigned short) -#define SHORT_HIGHBIT SIGNED_TYPE_HIGHBIT (short) -#ifndef SHORT_MAX -#define SHORT_MAX SIGNED_TYPE_MAX (short) -#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) - - -#if defined (__cplusplus) -extern "C" { -#endif - -/* FIXME: These are purely internal, so do a search and replace to change - them to __gmp forms, rather than using these macros. */ -#define _mp_allocate_func __gmp_allocate_func -#define _mp_reallocate_func __gmp_reallocate_func -#define _mp_free_func __gmp_free_func -#define _mp_default_allocate __gmp_default_allocate -#define _mp_default_reallocate __gmp_default_reallocate -#define _mp_default_free __gmp_default_free - -extern void * (*_mp_allocate_func) _PROTO ((size_t)); -extern void * (*_mp_reallocate_func) _PROTO ((void *, size_t, size_t)); -extern void (*_mp_free_func) _PROTO ((void *, size_t)); - -void *_mp_default_allocate _PROTO ((size_t)); -void *_mp_default_reallocate _PROTO ((void *, size_t, size_t)); -void _mp_default_free _PROTO ((void *, size_t)); - -#define _MP_ALLOCATE_FUNC_TYPE(n,type) \ - ((type *) (*_mp_allocate_func) ((n) * sizeof (type))) -#define _MP_ALLOCATE_FUNC_LIMBS(n) _MP_ALLOCATE_FUNC_TYPE(n,mp_limb_t) - -#define _MP_FREE_FUNC_TYPE(p,n,type) (*_mp_free_func) (p, (n) * sizeof (type)) -#define _MP_FREE_FUNC_LIMBS(p,n) _MP_FREE_FUNC_TYPE(p,n,mp_limb_t) - - -#if (__STDC__-0) || defined (__cplusplus) - -#else - -#define const /* Empty */ -#define signed /* Empty */ - -#endif - -#if defined (__GNUC__) && defined (__i386__) -#if 0 /* check that these actually improve things */ -#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") -#define MPN_NORMALIZE_NOT_ZERO(P, N) \ - do { \ - __asm__ ("std\n\trepe\n\tscasl" : "=c" (N) : \ - "a" (0), "D" ((P) + (N) - 1), "0" (N) : \ - "cx", "di"); \ - (N)++; \ - } while (0) -#endif -#endif - -#if HAVE_NATIVE_mpn_copyi -#define mpn_copyi __MPN(copyi) -void mpn_copyi _PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -/* Remap names of internal mpn functions. */ -#define __clz_tab __MPN(clz_tab) -#define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv) -#define mpn_reciprocal __MPN(reciprocal) - -#define mpn_sb_divrem_mn __MPN(sb_divrem_mn) -#define mpn_bz_divrem_n __MPN(bz_divrem_n) -/* #define mpn_tdiv_q __MPN(tdiv_q) */ - -#define mpn_kara_mul_n __MPN(kara_mul_n) -void mpn_kara_mul_n _PROTO((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr)); - -#define mpn_kara_sqr_n __MPN(kara_sqr_n) -void mpn_kara_sqr_n _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_ptr)); - -#define mpn_toom3_mul_n __MPN(toom3_mul_n) -void mpn_toom3_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t,mp_ptr)); - -#define mpn_toom3_sqr_n __MPN(toom3_sqr_n) -void mpn_toom3_sqr_n _PROTO((mp_ptr, mp_srcptr, mp_size_t, mp_ptr)); - -#define mpn_fft_best_k __MPN(fft_best_k) -int mpn_fft_best_k _PROTO ((mp_size_t n, int sqr)); - -#define mpn_mul_fft __MPN(mul_fft) -void mpn_mul_fft _PROTO ((mp_ptr op, mp_size_t pl, - mp_srcptr n, mp_size_t nl, - mp_srcptr m, mp_size_t ml, - int k)); - -#define mpn_mul_fft_full __MPN(mul_fft_full) -void mpn_mul_fft_full _PROTO ((mp_ptr op, - mp_srcptr n, mp_size_t nl, - mp_srcptr m, mp_size_t ml)); - -#define mpn_fft_next_size __MPN(fft_next_size) -mp_size_t mpn_fft_next_size _PROTO ((mp_size_t pl, int k)); - -mp_limb_t mpn_sb_divrem_mn _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); -mp_limb_t mpn_bz_divrem_n _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); -/* void mpn_tdiv_q _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); */ - -/* Copy NLIMBS *limbs* from SRC to DST, NLIMBS==0 allowed. */ -#ifndef MPN_COPY_INCR -#if HAVE_NATIVE_mpn_copyi -#define MPN_COPY_INCR(DST, SRC, NLIMBS) mpn_copyi (DST, SRC, NLIMBS) -#else -#define MPN_COPY_INCR(DST, SRC, NLIMBS) \ - do { \ - mp_size_t __i; \ - for (__i = 0; __i < (NLIMBS); __i++) \ - (DST)[__i] = (SRC)[__i]; \ - } while (0) -#endif -#endif - -#if HAVE_NATIVE_mpn_copyd -#define mpn_copyd __MPN(copyd) -void mpn_copyd _PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#endif - -/* NLIMBS==0 allowed */ -#ifndef MPN_COPY_DECR -#if HAVE_NATIVE_mpn_copyd -#define MPN_COPY_DECR(DST, SRC, NLIMBS) mpn_copyd (DST, SRC, NLIMBS) -#else -#define MPN_COPY_DECR(DST, SRC, NLIMBS) \ - do { \ - mp_size_t __i; \ - for (__i = (NLIMBS) - 1; __i >= 0; __i--) \ - (DST)[__i] = (SRC)[__i]; \ - } while (0) -#endif -#endif - -/* Define MPN_COPY for vector computers. Since #pragma cannot be in a macro, - rely on function inlining. */ -#if defined (_CRAY) || defined (__uxp__) -static inline void -_MPN_COPY (d, s, n) mp_ptr d; mp_srcptr s; mp_size_t n; -{ - int i; /* Faster for Cray with plain int */ -#pragma _CRI ivdep /* Cray PVP systems */ -#pragma loop noalias d,s /* Fujitsu VPP systems */ - for (i = 0; i < n; i++) - d[i] = s[i]; -} -#define MPN_COPY _MPN_COPY -#endif - -#ifndef MPN_COPY -#define MPN_COPY MPN_COPY_INCR -#endif - -/* Zero NLIMBS *limbs* AT DST. */ -#ifndef MPN_ZERO -#define MPN_ZERO(DST, NLIMBS) \ - do { \ - mp_size_t __i; \ - for (__i = 0; __i < (NLIMBS); __i++) \ - (DST)[__i] = 0; \ - } while (0) -#endif - -#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) \ - { \ - if ((DST)[(NLIMBS) - 1] != 0) \ - break; \ - NLIMBS--; \ - } \ - } while (0) -#endif - -/* Strip least significant zero limbs from ptr,size by incrementing ptr and - decrementing size. 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) \ - do \ - { \ - ASSERT ((size) != 0); \ - while ((ptr)[0] == 0) \ - { \ - (ptr)++; \ - (size)--; \ - ASSERT (size >= 0); \ - } \ - } \ - 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); \ - __x->_mp_alloc = (NLIMBS); \ - __x->_mp_d = (mp_ptr) TMP_ALLOC ((NLIMBS) * BYTES_PER_MP_LIMB); \ - } while (0) - -/* Realloc for an mpz_t WHAT if it has less thann NEEDED limbs. */ -#define MPZ_REALLOC(what,needed) \ - do { \ - if ((needed) > ALLOC (what)) \ - _mpz_realloc (what, needed); \ - } while (0) - -/* If KARATSUBA_MUL_THRESHOLD is not already defined, define it to a - value which is good on most machines. */ -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 32 -#endif - -/* If TOOM3_MUL_THRESHOLD is not already defined, define it to a - value which is good on most machines. */ -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 256 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD (2*KARATSUBA_MUL_THRESHOLD) -#endif - -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD (2*TOOM3_MUL_THRESHOLD) -#endif - -/* 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 FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD (TOOM3_MUL_THRESHOLD * 3) -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD (TOOM3_SQR_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 FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD (FFT_MODF_MUL_THRESHOLD * 10) -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD (FFT_MODF_SQR_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 FFT_MUL_TABLE -#define FFT_MUL_TABLE \ - { TOOM3_MUL_THRESHOLD * 4, /* k=5 */ \ - TOOM3_MUL_THRESHOLD * 8, /* k=6 */ \ - TOOM3_MUL_THRESHOLD * 16, /* k=7 */ \ - TOOM3_MUL_THRESHOLD * 32, /* k=8 */ \ - TOOM3_MUL_THRESHOLD * 96, /* k=9 */ \ - TOOM3_MUL_THRESHOLD * 288, /* k=10 */ \ - 0 } -#endif -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE \ - { TOOM3_SQR_THRESHOLD * 4, /* k=5 */ \ - TOOM3_SQR_THRESHOLD * 8, /* k=6 */ \ - TOOM3_SQR_THRESHOLD * 16, /* k=7 */ \ - TOOM3_SQR_THRESHOLD * 32, /* k=8 */ \ - TOOM3_SQR_THRESHOLD * 96, /* k=9 */ \ - TOOM3_SQR_THRESHOLD * 288, /* k=10 */ \ - 0 } -#endif - -#ifndef FFT_TABLE_ATTRS -#define FFT_TABLE_ATTRS static const -#endif - -#define MPN_FFT_TABLE_SIZE 16 - - -/* 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)) - - -/* ASSERT() is a private assertion checking scheme, similar to . - 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. - - ASSERT_NOCARRY() uses ASSERT() to check the expression is zero, but if - assertion checking is disabled, the expression is still evaluated. This - is meant for use with routines like mpn_add_n() where the return value - represents a carry or whatever that shouldn't occur. For example, - ASSERT_NOCARRY (mpn_add_n (rp, s1p, s2p, size)); */ - -#ifdef __LINE__ -#define ASSERT_LINE __LINE__ -#else -#define ASSERT_LINE -1 -#endif - -#ifdef __FILE__ -#define ASSERT_FILE __FILE__ -#else -#define ASSERT_FILE "" -#endif - -int __gmp_assert_fail _PROTO((const char *filename, int linenum, - const char *expr)); - -#if HAVE_STRINGIZE -#define ASSERT_FAIL(expr) __gmp_assert_fail (ASSERT_FILE, ASSERT_LINE, #expr) -#else -#define ASSERT_FAIL(expr) __gmp_assert_fail (ASSERT_FILE, ASSERT_LINE, "expr") -#endif - -#if HAVE_VOID -#define CAST_TO_VOID (void) -#else -#define CAST_TO_VOID -#endif - -#define ASSERT_ALWAYS(expr) ((expr) ? 0 : ASSERT_FAIL (expr)) - -#if WANT_ASSERT -#define ASSERT(expr) ASSERT_ALWAYS (expr) -#define ASSERT_NOCARRY(expr) ASSERT_ALWAYS ((expr) == 0) - -#else -#define ASSERT(expr) (CAST_TO_VOID 0) -#define ASSERT_NOCARRY(expr) (expr) -#endif - - -#if HAVE_NATIVE_mpn_com_n -#define mpn_com_n __MPN(com_n) -void mpn_com_n _PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -#else -#define mpn_com_n(d,s,n) \ - do \ - { \ - mp_ptr __d = (d); \ - mp_srcptr __s = (s); \ - mp_size_t __n = (n); \ - do \ - *__d++ = ~ *__s++; \ - while (--__n); \ - } \ - while (0) -#endif - -#define MPN_LOGOPS_N_INLINE(d,s1,s2,n,dop,op,s2op) \ - do \ - { \ - mp_ptr __d = (d); \ - mp_srcptr __s1 = (s1); \ - mp_srcptr __s2 = (s2); \ - mp_size_t __n = (n); \ - do \ - *__d++ = dop (*__s1++ op s2op *__s2++); \ - while (--__n); \ - } \ - while (0) - -#if HAVE_NATIVE_mpn_and_n -#define mpn_and_n __MPN(and_n) -void mpn_and_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_and_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n, ,&, ) -#endif - -#if HAVE_NATIVE_mpn_andn_n -#define mpn_andn_n __MPN(andn_n) -void mpn_andn_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_andn_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n, ,&,~) -#endif - -#if HAVE_NATIVE_mpn_nand_n -#define mpn_nand_n __MPN(nand_n) -void mpn_nand_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_nand_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n,~,&, ) -#endif - -#if HAVE_NATIVE_mpn_ior_n -#define mpn_ior_n __MPN(ior_n) -void mpn_ior_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_ior_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n, ,|, ) -#endif - -#if HAVE_NATIVE_mpn_iorn_n -#define mpn_iorn_n __MPN(iorn_n) -void mpn_iorn_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_iorn_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n, ,|,~) -#endif - -#if HAVE_NATIVE_mpn_nior_n -#define mpn_nior_n __MPN(nior_n) -void mpn_nior_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_nior_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n,~,|, ) -#endif - -#if HAVE_NATIVE_mpn_xor_n -#define mpn_xor_n __MPN(xor_n) -void mpn_xor_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_xor_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n, ,^, ) -#endif - -#if HAVE_NATIVE_mpn_xnor_n -#define mpn_xnor_n __MPN(xnor_n) -void mpn_xnor_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -#else -#define mpn_xnor_n(d,s1,s2,n) MPN_LOGOPS_N_INLINE(d,s1,s2,n,~,^, ) -#endif - -/* Structure for conversion between internal binary format and - strings in base 2..36. */ -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 a mp_limb_t has 32 bits this - is 9, since 10**9 is the largest number that fits into a mp_limb_t. */ - int chars_per_limb; - - /* log(2)/log(conversion_base) */ - double chars_per_bit_exactly; - - /* 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 BITS_PER_MP_LIMB 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(mp_bases) -extern const struct bases __mp_bases[]; -extern mp_size_t __gmp_default_fp_limb_precision; - -#if defined (__i386__) -#define TARGET_REGISTER_STARVED 1 -#else -#define TARGET_REGISTER_STARVED 0 -#endif - -/* Use a library function for invert_limb, if available. */ -#if ! defined (invert_limb) && HAVE_NATIVE_mpn_invert_limb -#define mpn_invert_limb __MPN(invert_limb) -mp_limb_t mpn_invert_limb _PROTO ((mp_limb_t)); -#define invert_limb(invxl,xl) (invxl = __MPN(invert_limb) (xl)) -#endif - -#ifndef invert_limb -#define invert_limb(invxl,xl) \ - do { \ - mp_limb_t dummy; \ - if (xl << 1 == 0) \ - invxl = ~(mp_limb_t) 0; \ - else \ - udiv_qrnnd (invxl, dummy, -xl, 0, xl); \ - } while (0) -#endif - -/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest - limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB). - If this would yield overflow, DI should be the largest possible number - (i.e., only ones). For correct operation, the most significant bit of D - has to be set. Put the quotient in Q and the remainder in R. */ -#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \ - do { \ - mp_limb_t _q, _ql, _r; \ - mp_limb_t _xh, _xl; \ - umul_ppmm (_q, _ql, (nh), (di)); \ - _q += (nh); /* DI is 2**BITS_PER_MP_LIMB too small */\ - umul_ppmm (_xh, _xl, _q, (d)); \ - sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \ - if (_xh != 0) \ - { \ - sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ - _q += 1; \ - if (_xh != 0) \ - { \ - sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ - _q += 1; \ - } \ - } \ - if (_r >= (d)) \ - { \ - _r -= (d); \ - _q += 1; \ - } \ - (r) = _r; \ - (q) = _q; \ - } while (0) -/* Like udiv_qrnnd_preinv, but for for any value D. DNORM is D shifted left - so that its most significant bit is set. LGUP is ceil(log2(D)). */ -#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \ - do { \ - mp_limb_t _n2, _n10, _n1, _nadj, _q1; \ - mp_limb_t _xh, _xl; \ - _n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\ - _n10 = (nl) << (BITS_PER_MP_LIMB - (lgup)); \ - _n1 = ((mp_limb_signed_t) _n10 >> (BITS_PER_MP_LIMB - 1)); \ - _nadj = _n10 + (_n1 & (dnorm)); \ - umul_ppmm (_xh, _xl, di, _n2 - _n1); \ - add_ssaaaa (_xh, _xl, _xh, _xl, 0, _nadj); \ - _q1 = ~(_n2 + _xh); \ - umul_ppmm (_xh, _xl, _q1, d); \ - add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \ - _xh -= (d); \ - (r) = _xl + ((d) & _xh); \ - (q) = _xh - _q1; \ - } while (0) -/* Exactly like udiv_qrnnd_preinv, but branch-free. It is not clear which - version to use. */ -#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \ - do { \ - mp_limb_t _n2, _n10, _n1, _nadj, _q1; \ - mp_limb_t _xh, _xl; \ - _n2 = (nh); \ - _n10 = (nl); \ - _n1 = ((mp_limb_signed_t) _n10 >> (BITS_PER_MP_LIMB - 1)); \ - _nadj = _n10 + (_n1 & (d)); \ - umul_ppmm (_xh, _xl, di, _n2 - _n1); \ - add_ssaaaa (_xh, _xl, _xh, _xl, 0, _nadj); \ - _q1 = ~(_n2 + _xh); \ - umul_ppmm (_xh, _xl, _q1, d); \ - add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \ - _xh -= (d); \ - (r) = _xl + ((d) & _xh); \ - (q) = _xh - _q1; \ - } while (0) - - -/* modlimb_invert() sets "inv" to the multiplicative inverse of "n" modulo - 2^BITS_PER_MP_LIMB, ie. so that inv*n == 1 mod 2^BITS_PER_MP_LIMB. - "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's exact division - paper, end of section 4 (reference in gmp.texi). */ - -#define modlimb_invert_table __gmp_modlimb_invert_table -extern const unsigned char modlimb_invert_table[128]; - -#if BITS_PER_MP_LIMB <= 32 -#define modlimb_invert(inv,n) \ - do { \ - mp_limb_t __n = (n); \ - mp_limb_t __inv; \ - ASSERT ((__n & 1) == 1); \ - __inv = modlimb_invert_table[(__n&0xFF)/2]; /* 8 */ \ - __inv = 2 * __inv - __inv * __inv * __n; /* 16 */ \ - __inv = 2 * __inv - __inv * __inv * __n; /* 32 */ \ - ASSERT (__inv * __n == 1); \ - (inv) = __inv; \ - } while (0) -#endif - -#if BITS_PER_MP_LIMB > 32 && BITS_PER_MP_LIMB <= 64 -#define modlimb_invert(inv,n) \ - do { \ - mp_limb_t __n = (n); \ - mp_limb_t __inv; \ - ASSERT ((__n & 1) == 1); \ - __inv = modlimb_invert_table[(__n&0xFF)/2]; /* 8 */ \ - __inv = 2 * __inv - __inv * __inv * __n; /* 16 */ \ - __inv = 2 * __inv - __inv * __inv * __n; /* 32 */ \ - __inv = 2 * __inv - __inv * __inv * __n; /* 64 */ \ - ASSERT (__inv * __n == 1); \ - (inv) = __inv; \ - } while (0) -#endif - - -/* The `mode' attribute was introduced in GCC 2.2, but we can only distinguish - between GCC 2 releases from 2.5, since __GNUC_MINOR__ wasn't introduced - until then. */ -#if (__GNUC__ - 0 > 2 || defined (__GNUC_MINOR__)) && ! defined (__APPLE_CC__) -/* Define stuff for longlong.h. */ -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 defined _LONGLONG || defined _LONG_LONG_LIMB -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 BITS_PER_MP_LIMB - -/* Define ieee_double_extract and _GMP_IEEE_FLOATS. */ - -#if (defined (__arm__) && (defined (__ARMWEL__) || defined (__linux__))) -/* Special case for little endian ARM since floats remain in big-endian. */ -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - unsigned int manh:20; - unsigned int exp:11; - unsigned int sig:1; - unsigned int manl:32; - } s; - double d; -}; -#else -#if defined (_LITTLE_ENDIAN) || defined (__LITTLE_ENDIAN__) \ - || defined (__alpha) \ - || defined (__clipper__) \ - || defined (__cris) \ - || defined (__i386__) \ - || defined (__i860__) \ - || defined (__i960__) \ - || defined (MIPSEL) || defined (_MIPSEL) \ - || defined (__ns32000__) \ - || defined (__WINNT) || defined (_WIN32) -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - unsigned int manl:32; - unsigned int manh:20; - unsigned int exp:11; - unsigned int sig:1; - } s; - double d; -}; -#else /* Need this as an #else since the tests aren't made exclusive. */ -#if defined (_BIG_ENDIAN) || defined (__BIG_ENDIAN__) \ - || defined (__a29k__) || defined (_AM29K) \ - || defined (__arm__) \ - || (defined (__convex__) && defined (_IEEE_FLOAT_)) \ - || defined (_CRAYMPP) \ - || defined (__i370__) || defined (__mvs__) \ - || defined (__mc68000__) || defined (__mc68020__) || defined (__m68k__)\ - || defined(mc68020) \ - || defined (__m88000__) \ - || defined (MIPSEB) || defined (_MIPSEB) \ - || defined (__hppa) || defined (__hppa__) \ - || defined (__pyr__) \ - || defined (__ibm032__) \ - || defined (_IBMR2) || defined (_ARCH_PPC) \ - || defined (__sh__) \ - || defined (__sparc) || defined (sparc) \ - || defined (__we32k__) -#define _GMP_IEEE_FLOATS 1 -union ieee_double_extract -{ - struct - { - unsigned int sig:1; - unsigned int exp:11; - unsigned int manh:20; - unsigned int manl:32; - } s; - double d; -}; -#endif -#endif -#endif - -/* Using "(2.0 * ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1)))" doesn't work on - SunOS 4.1.4 native /usr/ucb/cc (K&R), it comes out as -4294967296.0, - presumably due to treating the mp_limb_t constant as signed rather than - unsigned. */ -#define MP_BASE_AS_DOUBLE (4.0 * ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 2))) -#if BITS_PER_MP_LIMB == 64 -#define LIMBS_PER_DOUBLE 2 -#else -#define LIMBS_PER_DOUBLE 3 -#endif - -double __gmp_scale2 _PROTO ((double, int)); -int __gmp_extract_double _PROTO ((mp_ptr, double)); - -extern int __gmp_junk; -extern const int __gmp_0; -#define GMP_ERROR(code) (gmp_errno |= (code), __gmp_junk = 10/__gmp_0) -#define DIVIDE_BY_ZERO GMP_ERROR(GMP_ERROR_DIVISION_BY_ZERO) -#define SQRT_OF_NEGATIVE GMP_ERROR(GMP_ERROR_SQRT_OF_NEGATIVE) - -#if defined _LONG_LONG_LIMB -#if defined (__STDC__) -#define CNST_LIMB(C) C##LL -#else -#define CNST_LIMB(C) C/**/LL -#endif -#else /* not _LONG_LONG_LIMB */ -#if defined (__STDC__) -#define CNST_LIMB(C) C##L -#else -#define CNST_LIMB(C) C/**/L -#endif -#endif /* _LONG_LONG_LIMB */ - -/*** Stuff used by mpn/generic/prefsqr.c and mpn/generic/next_prime.c ***/ -#if BITS_PER_MP_LIMB == 32 -#define PP 0xC0CFD797L /* 3 x 5 x 7 x 11 x 13 x ... x 29 */ -#define PP_INVERTED 0x53E5645CL -#define PP_MAXPRIME 29 -#define PP_MASK 0x208A28A8L -#endif - -#if BITS_PER_MP_LIMB == 64 -#define PP CNST_LIMB(0xE221F97C30E94E1D) /* 3 x 5 x 7 x 11 x 13 x ... x 53 */ -#define PP_INVERTED CNST_LIMB(0x21CFE6CFC938B36B) -#define PP_MAXPRIME 53 -#define PP_MASK CNST_LIMB(0x208A20A08A28A8) -#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. - - 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) - -/* (a/0), with a an mpz_t; is 1 if a=+/-1, 0 otherwise - An mpz_t always has at least one limb of allocated space, so the fetch of - the low limb is valid. */ -#define JACOBI_Z0(a) \ - (((SIZ(a) == 1) | (SIZ(a) == -1)) & (PTR(a)[0] == 1)) - -/* Convert a bit1 to +1 or -1. */ -#define JACOBI_BIT1_TO_PN(result_bit1) \ - (1 - ((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) \ - (ASSERT (b & 1), (((b) >> 1) ^ (b))) - -/* (2/b)^twos, with b unsigned and odd */ -#define JACOBI_TWOS_U_BIT1(twos, b) \ - (((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))) - -/* (a/b) effect due to sign of a: signed/unsigned, b odd; - is (-1)^((b-1)/2) if a<0, or +1 if a>=0 */ -#define JACOBI_ASGN_SU_BIT1(a, b) \ - ((((a) < 0) << 1) & (b)) - -/* (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) \ - ((((a) < 0) & (SIZ(b) < 0)) << 1) - -/* (a/b) effect due to sign of b: mpz/signed */ -#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) \ - ((a) & (b)) - - -/* For testing and debugging. */ -#define MPZ_CHECK_FORMAT(z) \ - (ASSERT_ALWAYS (SIZ(z) == 0 || PTR(z)[ABSIZ(z) - 1] != 0), \ - ASSERT_ALWAYS (ALLOC(z) >= ABSIZ(z))) -#define MPZ_PROVOKE_REALLOC(z) \ - do { ALLOC(z) = ABSIZ(z); } while (0) - - -#if TUNE_PROGRAM_BUILD -/* Some extras wanted when recompiling some .c files for use by the tune - program. Not part of a normal build. */ - -extern mp_size_t mul_threshold[]; -extern mp_size_t fft_modf_mul_threshold; -extern mp_size_t sqr_threshold[]; -extern mp_size_t fft_modf_sqr_threshold; -extern mp_size_t bz_threshold[]; -extern mp_size_t fib_threshold[]; -extern mp_size_t powm_threshold[]; -extern mp_size_t gcd_accel_threshold[]; -extern mp_size_t gcdext_threshold[]; - -#undef KARATSUBA_MUL_THRESHOLD -#undef TOOM3_MUL_THRESHOLD -#undef FFT_MUL_TABLE -#undef FFT_MUL_THRESHOLD -#undef FFT_MODF_MUL_THRESHOLD -#undef KARATSUBA_SQR_THRESHOLD -#undef TOOM3_SQR_THRESHOLD -#undef FFT_SQR_TABLE -#undef FFT_SQR_THRESHOLD -#undef FFT_MODF_SQR_THRESHOLD -#undef BZ_THRESHOLD -#undef FIB_THRESHOLD -#undef POWM_THRESHOLD -#undef GCD_ACCEL_THRESHOLD -#undef GCDEXT_THRESHOLD - -#define KARATSUBA_MUL_THRESHOLD mul_threshold[0] -#define TOOM3_MUL_THRESHOLD mul_threshold[1] -#define FFT_MUL_TABLE 0 -#define FFT_MUL_THRESHOLD mul_threshold[2] -#define FFT_MODF_MUL_THRESHOLD fft_modf_mul_threshold -#define KARATSUBA_SQR_THRESHOLD sqr_threshold[0] -#define TOOM3_SQR_THRESHOLD sqr_threshold[1] -#define FFT_SQR_TABLE 0 -#define FFT_SQR_THRESHOLD sqr_threshold[2] -#define FFT_MODF_SQR_THRESHOLD fft_modf_sqr_threshold -#define BZ_THRESHOLD bz_threshold[0] -#define FIB_THRESHOLD fib_threshold[0] -#define POWM_THRESHOLD powm_threshold[0] -#define GCD_ACCEL_THRESHOLD gcd_accel_threshold[0] -#define GCDEXT_THRESHOLD gcdext_threshold[0] - -#define TOOM3_MUL_THRESHOLD_LIMIT 700 - -#undef FFT_TABLE_ATTRS -#define FFT_TABLE_ATTRS -extern mp_size_t mpn_fft_table[2][MPN_FFT_TABLE_SIZE]; - -#endif /* TUNE_PROGRAM_BUILD */ - -#if defined (__cplusplus) -} -#endif diff --git a/rts/gmp/gmp.h b/rts/gmp/gmp.h deleted file mode 100644 index 0f1b951..0000000 --- a/rts/gmp/gmp.h +++ /dev/null @@ -1,1083 +0,0 @@ -/* gmp.h -- Definitions for GNU multiple precision functions. - -Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifndef __GMP_H__ - -#ifndef __GNU_MP__ /* to allow inclusion of both gmp.h and mp.h */ -#define __GNU_MP__ 2 -#define __need_size_t -#include -#undef __need_size_t - -#ifndef STG_H -/* Get DLL_IMPORT */ -#include "../../includes/ghcconfig.h" -#include "../../includes/StgDLL.h" -#endif - -#if defined (__mips) && defined (_ABIN32) -/* Force the use of 64-bit limbs for all 64-bit MIPS CPUs if ABI permits. */ -#define _LONG_LONG_LIMB -#endif - -#if (__STDC__-0) || defined (__cplusplus) -#define __gmp_const const -#define __gmp_signed signed -#else -#define __gmp_const -#define __gmp_signed -#endif - -#if defined (__GNUC__) -#define __gmp_inline __inline__ -#else -#define __gmp_inline -#endif - -#ifndef _EXTERN_INLINE -#ifdef __GNUC__ -#define _EXTERN_INLINE extern __inline__ -#else -#define _EXTERN_INLINE static -#endif -#endif - -#ifdef _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 mp_limb_t * mp_ptr; -typedef __gmp_const mp_limb_t * mp_srcptr; -#if defined (_CRAY) && ! defined (_CRAYMPP) -/* plain `int' is much faster (48 bits) */ -typedef int mp_size_t; -typedef int mp_exp_t; -#else -typedef long int mp_size_t; -typedef long int mp_exp_t; -#endif - -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; -typedef __mpz_struct mpz_t[1]; - -typedef struct -{ - __mpz_struct _mp_num; - __mpz_struct _mp_den; -} __mpq_struct; - -typedef __mpq_struct MP_RAT; -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; - -/* Linear congruential data struct. */ -typedef struct { - mpz_t a; /* Multiplier. */ - unsigned long int c; /* Adder. */ - mpz_t m; /* Modulus (valid only if m2exp == 0). */ - unsigned long int m2exp; /* If != 0, modulus is 2 ^ m2exp. */ -} __gmp_randata_lc; - -/* Random state struct. */ -typedef struct -{ - mpz_t seed; /* Current seed. */ - gmp_randalg_t alg; /* Algorithm used. */ - union { /* Algorithm specific data. */ - __gmp_randata_lc *lc; /* Linear congruential. */ - } 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 __gmp_const __mpz_struct *mpz_srcptr; -typedef __mpz_struct *mpz_ptr; -typedef __gmp_const __mpf_struct *mpf_srcptr; -typedef __mpf_struct *mpf_ptr; -typedef __gmp_const __mpq_struct *mpq_srcptr; -typedef __mpq_struct *mpq_ptr; - -#ifndef _PROTO -#if (__STDC__-0) || defined (__cplusplus) -#define _PROTO(x) x -#else -#define _PROTO(x) () -#endif -#endif - -#ifndef __MPN -/* Really use `defined (__STDC__)' here; we want it to be true for Sun C */ -#if defined (__STDC__) || defined (__cplusplus) -#define __MPN(x) __gmpn_##x -#else -#define __MPN(x) __gmpn_/**/x -#endif -#endif - -#if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \ - || defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \ - || defined (_STDIO_INCLUDED) || defined (__dj_include_stdio_h_) -#define _GMP_H_HAVE_FILE 1 -#endif - -#if defined (__cplusplus) -extern "C" { -#endif - -#define mp_set_memory_functions __gmp_set_memory_functions -DLL_IMPORT void mp_set_memory_functions _PROTO ((void *(*) (size_t), - void *(*) (void *, size_t, size_t), - void (*) (void *, size_t))); - -#define mp_bits_per_limb __gmp_bits_per_limb -DLL_IMPORT extern __gmp_const int mp_bits_per_limb; - -#if defined (__cplusplus) -} -#endif - - -/**************** Random number routines. ****************/ - -#define _gmp_rand __gmp_rand -#define gmp_randinit __gmp_randinit -#define gmp_randinit_lc __gmp_randinit_lc -#define gmp_randinit_lc_2exp __gmp_randinit_lc_2exp -#define gmp_randseed __gmp_randseed -#define gmp_randseed_ui __gmp_randseed_ui -#define gmp_randclear __gmp_randclear - -#if defined (__cplusplus) -extern "C" { -#endif - -DLL_IMPORT void _gmp_rand _PROTO ((mp_ptr, gmp_randstate_t, unsigned long int)); -DLL_IMPORT void gmp_randinit _PROTO ((gmp_randstate_t, gmp_randalg_t, ...)); -DLL_IMPORT void gmp_randinit_lc _PROTO ((gmp_randstate_t, mpz_t, unsigned long int, - mpz_t)); -DLL_IMPORT void gmp_randinit_lc_2exp _PROTO ((gmp_randstate_t, mpz_t, unsigned long int, - unsigned long int)); -DLL_IMPORT void gmp_randseed _PROTO ((gmp_randstate_t, mpz_t)); -DLL_IMPORT void gmp_randseed_ui _PROTO ((gmp_randstate_t, unsigned long int)); -DLL_IMPORT void gmp_randclear _PROTO ((gmp_randstate_t)); - -#if defined (__cplusplus) -} -#endif - -/**************** Integer (i.e. Z) routines. ****************/ - -#define _mpz_realloc __gmpz_realloc -#define mpz_realloc __gmpz_realloc -#define mpz_abs __gmpz_abs -#define mpz_add __gmpz_add -#define mpz_add_ui __gmpz_add_ui -#define mpz_addmul_ui __gmpz_addmul_ui -#define mpz_and __gmpz_and -#define mpz_array_init __gmpz_array_init -#define mpz_bin_ui __gmpz_bin_ui -#define mpz_bin_uiui __gmpz_bin_uiui -#define mpz_cdiv_q __gmpz_cdiv_q -#define mpz_cdiv_q_ui __gmpz_cdiv_q_ui -#define mpz_cdiv_qr __gmpz_cdiv_qr -#define mpz_cdiv_qr_ui __gmpz_cdiv_qr_ui -#define mpz_cdiv_r __gmpz_cdiv_r -#define mpz_cdiv_r_ui __gmpz_cdiv_r_ui -#define mpz_cdiv_ui __gmpz_cdiv_ui -#define mpz_clear __gmpz_clear -#define mpz_clrbit __gmpz_clrbit -#define mpz_cmp __gmpz_cmp -#define _mpz_cmp_si __gmpz_cmp_si -#define _mpz_cmp_ui __gmpz_cmp_ui -#define mpz_cmpabs __gmpz_cmpabs -#define mpz_cmpabs_ui __gmpz_cmpabs_ui -#define mpz_com __gmpz_com -#define mpz_divexact __gmpz_divexact -#define mpz_dump __gmpz_dump -#define mpz_fac_ui __gmpz_fac_ui -#define mpz_fdiv_q __gmpz_fdiv_q -#define mpz_fdiv_q_2exp __gmpz_fdiv_q_2exp -#define mpz_fdiv_q_ui __gmpz_fdiv_q_ui -#define mpz_fdiv_qr __gmpz_fdiv_qr -#define mpz_fdiv_qr_ui __gmpz_fdiv_qr_ui -#define mpz_fdiv_r __gmpz_fdiv_r -#define mpz_fdiv_r_2exp __gmpz_fdiv_r_2exp -#define mpz_fdiv_r_ui __gmpz_fdiv_r_ui -#define mpz_fdiv_ui __gmpz_fdiv_ui -#define mpz_fib_ui __gmpz_fib_ui -#define mpz_fits_sint_p __gmpz_fits_sint_p -#define mpz_fits_slong_p __gmpz_fits_slong_p -#define mpz_fits_sshort_p __gmpz_fits_sshort_p -#define mpz_fits_uint_p __gmpz_fits_uint_p -#define mpz_fits_ulong_p __gmpz_fits_ulong_p -#define mpz_fits_ushort_p __gmpz_fits_ushort_p -#define mpz_gcd __gmpz_gcd -#define mpz_gcd_ui __gmpz_gcd_ui -#define mpz_gcdext __gmpz_gcdext -#define mpz_get_d __gmpz_get_d -#define mpz_get_si __gmpz_get_si -#define mpz_get_str __gmpz_get_str -#define mpz_get_ui __gmpz_get_ui -#define mpz_getlimbn __gmpz_getlimbn -#define mpz_hamdist __gmpz_hamdist -#define mpz_init __gmpz_init -#define mpz_inp_binary __gmpz_inp_binary -#define mpz_inp_raw __gmpz_inp_raw -#define mpz_inp_str __gmpz_inp_str -#define mpz_init_set __gmpz_init_set -#define mpz_init_set_d __gmpz_init_set_d -#define mpz_init_set_si __gmpz_init_set_si -#define mpz_init_set_str __gmpz_init_set_str -#define mpz_init_set_ui __gmpz_init_set_ui -#define mpz_invert __gmpz_invert -#define mpz_ior __gmpz_ior -#define mpz_jacobi __gmpz_jacobi -#define mpz_lcm __gmpz_lcm -#define mpz_legendre __gmpz_legendre -#define mpz_mod __gmpz_mod -#define mpz_mul __gmpz_mul -#define mpz_mul_2exp __gmpz_mul_2exp -#define mpz_neg __gmpz_neg -#define mpz_nextprime __gmpz_nextprime -#define mpz_out_binary __gmpz_out_binary -#define mpz_out_raw __gmpz_out_raw -#define mpz_out_str __gmpz_out_str -#define mpz_perfect_power_p __gmpz_perfect_power_p -#define mpz_perfect_square_p __gmpz_perfect_square_p -#define mpz_popcount __gmpz_popcount -#define mpz_pow_ui __gmpz_pow_ui -#define mpz_powm __gmpz_powm -#define mpz_powm_ui __gmpz_powm_ui -#define mpz_probab_prime_p __gmpz_probab_prime_p -#define mpz_random __gmpz_random -#define mpz_random2 __gmpz_random2 -#define mpz_remove __gmpz_remove -#define mpz_root __gmpz_root -#define mpz_rrandomb __gmpz_rrandomb -#define mpz_scan0 __gmpz_scan0 -#define mpz_scan1 __gmpz_scan1 -#define mpz_set __gmpz_set -#define mpz_set_d __gmpz_set_d -#define mpz_set_f __gmpz_set_f -#define mpz_set_q __gmpz_set_q -#define mpz_set_si __gmpz_set_si -#define mpz_set_str __gmpz_set_str -#define mpz_set_ui __gmpz_set_ui -#define mpz_setbit __gmpz_setbit -#define mpz_size __gmpz_size -#define mpz_sizeinbase __gmpz_sizeinbase -#define mpz_sqrt __gmpz_sqrt -#define mpz_sqrtrem __gmpz_sqrtrem -#define mpz_sub __gmpz_sub -#define mpz_sub_ui __gmpz_sub_ui -#define mpz_swap __gmpz_swap -#define mpz_tdiv_ui __gmpz_tdiv_ui -#define mpz_tdiv_q __gmpz_tdiv_q -#define mpz_tdiv_q_2exp __gmpz_tdiv_q_2exp -#define mpz_tdiv_q_ui __gmpz_tdiv_q_ui -#define mpz_tdiv_qr __gmpz_tdiv_qr -#define mpz_tdiv_qr_ui __gmpz_tdiv_qr_ui -#define mpz_tdiv_r __gmpz_tdiv_r -#define mpz_tdiv_r_2exp __gmpz_tdiv_r_2exp -#define mpz_tdiv_r_ui __gmpz_tdiv_r_ui -#define mpz_tstbit __gmpz_tstbit -#define mpz_ui_pow_ui __gmpz_ui_pow_ui -#define mpz_urandomb __gmpz_urandomb -#define mpz_urandomm __gmpz_urandomm -#define mpz_xor __gmpz_xor -#define mpz_eor __gmpz_xor - -#if defined (__cplusplus) -extern "C" { -#endif -DLL_IMPORT void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t)); - -DLL_IMPORT void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_addmul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t)); -DLL_IMPORT void mpz_bin_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_bin_uiui _PROTO ((mpz_ptr, unsigned long int, unsigned long int)); -DLL_IMPORT void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_clear _PROTO ((mpz_ptr)); -DLL_IMPORT void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr)); -DLL_IMPORT int _mpz_cmp_si _PROTO ((mpz_srcptr, signed long int)); -DLL_IMPORT int _mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT int mpz_cmpabs _PROTO ((mpz_srcptr, mpz_srcptr)); -DLL_IMPORT int mpz_cmpabs_ui _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_com _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_dump _PROTO ((mpz_srcptr)); -DLL_IMPORT void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_fib_ui _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT int mpz_fits_sint_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_fits_slong_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_fits_sshort_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_fits_uint_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_fits_ulong_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_fits_ushort_p _PROTO ((mpz_srcptr)); -DLL_IMPORT void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT double mpz_get_d _PROTO ((mpz_srcptr)); -/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr)); -DLL_IMPORT char *mpz_get_str _PROTO ((char *, int, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_get_ui _PROTO ((mpz_srcptr)); -DLL_IMPORT mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t)); -DLL_IMPORT unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_init _PROTO ((mpz_ptr)); -#ifdef _GMP_H_HAVE_FILE -DLL_IMPORT size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *)); -DLL_IMPORT size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *)); -DLL_IMPORT size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int)); -#endif -DLL_IMPORT void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_init_set_d _PROTO ((mpz_ptr, double)); -DLL_IMPORT void mpz_init_set_si _PROTO ((mpz_ptr, signed long int)); -DLL_IMPORT int mpz_init_set_str _PROTO ((mpz_ptr, __gmp_const char *, int)); -DLL_IMPORT void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr)); - -#define mpz_kronecker_si __gmpz_kronecker_si -DLL_IMPORT int mpz_kronecker_si _PROTO ((mpz_srcptr, long)); - -#define mpz_kronecker_ui __gmpz_kronecker_ui -DLL_IMPORT int mpz_kronecker_ui _PROTO ((mpz_srcptr, unsigned long)); - -#define mpz_si_kronecker __gmpz_si_kronecker -DLL_IMPORT int mpz_si_kronecker _PROTO ((long, mpz_srcptr)); - -#define mpz_ui_kronecker __gmpz_ui_kronecker -DLL_IMPORT int mpz_ui_kronecker _PROTO ((unsigned long, mpz_srcptr)); - -DLL_IMPORT void mpz_lcm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -#define mpz_mul_si __gmpz_mul_si -DLL_IMPORT void mpz_mul_si _PROTO ((mpz_ptr, mpz_srcptr, long int)); - -#define mpz_mul_ui __gmpz_mul_ui -DLL_IMPORT void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); - -DLL_IMPORT void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_nextprime _PROTO ((mpz_ptr, mpz_srcptr)); -#ifdef _GMP_H_HAVE_FILE -DLL_IMPORT size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr)); -DLL_IMPORT size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr)); -DLL_IMPORT size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr)); -#endif -DLL_IMPORT int mpz_perfect_power_p _PROTO ((mpz_srcptr)); -DLL_IMPORT int mpz_perfect_square_p _PROTO ((mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_popcount _PROTO ((mpz_srcptr)); -DLL_IMPORT void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); -DLL_IMPORT int mpz_probab_prime_p _PROTO ((mpz_srcptr, int)); -DLL_IMPORT void mpz_random _PROTO ((mpz_ptr, mp_size_t)); -DLL_IMPORT void mpz_random2 _PROTO ((mpz_ptr, mp_size_t)); -DLL_IMPORT unsigned long int mpz_remove _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT int mpz_root _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_rrandomb _PROTO ((mpz_ptr, gmp_randstate_t, unsigned long int)); -DLL_IMPORT unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_set _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_set_d _PROTO ((mpz_ptr, double)); -DLL_IMPORT void mpz_set_f _PROTO ((mpz_ptr, mpf_srcptr)); -DLL_IMPORT void mpz_set_q _PROTO ((mpz_ptr, mpq_srcptr)); -DLL_IMPORT void mpz_set_si _PROTO ((mpz_ptr, signed long int)); -DLL_IMPORT int mpz_set_str _PROTO ((mpz_ptr, __gmp_const char *, int)); -DLL_IMPORT void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT void mpz_setbit _PROTO ((mpz_ptr, unsigned long int)); -DLL_IMPORT size_t mpz_size _PROTO ((mpz_srcptr)); -DLL_IMPORT size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int)); -DLL_IMPORT void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); -DLL_IMPORT void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_swap _PROTO ((mpz_ptr, mpz_ptr)); -DLL_IMPORT void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_tdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT unsigned long int mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -DLL_IMPORT void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); -DLL_IMPORT int mpz_tstbit _PROTO ((mpz_srcptr, unsigned long int)); -DLL_IMPORT void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int)); -DLL_IMPORT void mpz_urandomb _PROTO ((mpz_t, gmp_randstate_t, unsigned long int)); -DLL_IMPORT void mpz_urandomm _PROTO ((mpz_t, gmp_randstate_t, mpz_t)); -DLL_IMPORT void mpz_xor _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); -#if defined (__cplusplus) -} -#endif - -/**************** Rational (i.e. Q) routines. ****************/ - -#define mpq_init __gmpq_init -#define mpq_clear __gmpq_clear -#define mpq_set __gmpq_set -#define mpq_set_ui __gmpq_set_ui -#define mpq_set_si __gmpq_set_si -#define mpq_set_z __gmpq_set_z -#define mpq_add __gmpq_add -#define mpq_sub __gmpq_sub -#define mpq_mul __gmpq_mul -#define mpq_div __gmpq_div -#define mpq_neg __gmpq_neg -#define mpq_cmp __gmpq_cmp -#define _mpq_cmp_ui __gmpq_cmp_ui -#define mpq_equal __gmpq_equal -#define mpq_inv __gmpq_inv -#define mpq_set_num __gmpq_set_num -#define mpq_set_den __gmpq_set_den -#define mpq_get_num __gmpq_get_num -#define mpq_get_den __gmpq_get_den -#define mpq_get_d __gmpq_get_d -#define mpq_set_d __gmpq_set_d -#define mpq_canonicalize __gmpq_canonicalize - -#if defined (__cplusplus) -extern "C" { -#endif -DLL_IMPORT void mpq_init _PROTO ((mpq_ptr)); -DLL_IMPORT void mpq_clear _PROTO ((mpq_ptr)); -DLL_IMPORT void mpq_set _PROTO ((mpq_ptr, mpq_srcptr)); -DLL_IMPORT void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int)); -DLL_IMPORT void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int)); -DLL_IMPORT void mpq_set_z _PROTO ((mpq_ptr, mpz_srcptr)); -DLL_IMPORT void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); -DLL_IMPORT void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); -DLL_IMPORT void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); -DLL_IMPORT void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); -DLL_IMPORT void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr)); -DLL_IMPORT int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr)); -DLL_IMPORT int _mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int)); -DLL_IMPORT int mpq_equal _PROTO ((mpq_srcptr, mpq_srcptr)); -DLL_IMPORT void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr)); -DLL_IMPORT void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr)); -DLL_IMPORT void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr)); -DLL_IMPORT void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr)); -DLL_IMPORT void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr)); -DLL_IMPORT double mpq_get_d _PROTO ((mpq_srcptr)); -DLL_IMPORT void mpq_set_d _PROTO ((mpq_ptr, double)); -DLL_IMPORT void mpq_canonicalize _PROTO ((mpq_ptr)); - -#define mpq_swap __gmpq_swap -DLL_IMPORT void mpq_swap _PROTO ((mpq_ptr, mpq_ptr)); - -#ifdef _GMP_H_HAVE_FILE -#define mpq_out_str __gmpq_out_str -DLL_IMPORT size_t mpq_out_str _PROTO ((FILE *, int, mpq_srcptr)); -#endif - -#if defined (__cplusplus) -} -#endif - -/**************** Float (i.e. F) routines. ****************/ - -#define mpf_abs __gmpf_abs -#define mpf_add __gmpf_add -#define mpf_add_ui __gmpf_add_ui -#define mpf_ceil __gmpf_ceil -#define mpf_clear __gmpf_clear -#define mpf_cmp __gmpf_cmp -#define mpf_cmp_si __gmpf_cmp_si -#define mpf_cmp_ui __gmpf_cmp_ui -#define mpf_div __gmpf_div -#define mpf_div_2exp __gmpf_div_2exp -#define mpf_div_ui __gmpf_div_ui -#define mpf_dump __gmpf_dump -#define mpf_floor __gmpf_floor -#define mpf_eq __gmpf_eq -#define mpf_get_d __gmpf_get_d -#define mpf_get_prec __gmpf_get_prec -#define mpf_get_str __gmpf_get_str -#define mpf_init __gmpf_init -#define mpf_init2 __gmpf_init2 -#define mpf_inp_str __gmpf_inp_str -#define mpf_init_set __gmpf_init_set -#define mpf_init_set_d __gmpf_init_set_d -#define mpf_init_set_si __gmpf_init_set_si -#define mpf_init_set_str __gmpf_init_set_str -#define mpf_init_set_ui __gmpf_init_set_ui -#define mpf_mul __gmpf_mul -#define mpf_mul_2exp __gmpf_mul_2exp -#define mpf_mul_ui __gmpf_mul_ui -#define mpf_neg __gmpf_neg -#define mpf_out_str __gmpf_out_str -#define mpf_pow_ui __gmpf_pow_ui -#define mpf_random2 __gmpf_random2 -#define mpf_reldiff __gmpf_reldiff -#define mpf_set __gmpf_set -#define mpf_set_d __gmpf_set_d -#define mpf_set_default_prec __gmpf_set_default_prec -#define mpf_set_prec __gmpf_set_prec -#define mpf_set_prec_raw __gmpf_set_prec_raw -#define mpf_set_q __gmpf_set_q -#define mpf_set_si __gmpf_set_si -#define mpf_set_str __gmpf_set_str -#define mpf_set_ui __gmpf_set_ui -#define mpf_set_z __gmpf_set_z -#define mpf_size __gmpf_size -#define mpf_sqrt __gmpf_sqrt -#define mpf_sqrt_ui __gmpf_sqrt_ui -#define mpf_sub __gmpf_sub -#define mpf_sub_ui __gmpf_sub_ui -#define mpf_trunc __gmpf_trunc -#define mpf_ui_div __gmpf_ui_div -#define mpf_ui_sub __gmpf_ui_sub -#define mpf_urandomb __gmpf_urandomb - -#if defined (__cplusplus) -extern "C" { -#endif -DLL_IMPORT void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); -DLL_IMPORT void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_ceil _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_clear _PROTO ((mpf_ptr)); -DLL_IMPORT int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr)); -DLL_IMPORT int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int)); -DLL_IMPORT int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); -DLL_IMPORT void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_dump _PROTO ((mpf_srcptr)); -DLL_IMPORT int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_floor _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT double mpf_get_d _PROTO ((mpf_srcptr)); -DLL_IMPORT unsigned long int mpf_get_prec _PROTO ((mpf_srcptr)); -char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); -DLL_IMPORT void mpf_init _PROTO ((mpf_ptr)); -DLL_IMPORT void mpf_init2 _PROTO ((mpf_ptr, unsigned long int)); -#ifdef _GMP_H_HAVE_FILE -DLL_IMPORT size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int)); -#endif -DLL_IMPORT void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_init_set_d _PROTO ((mpf_ptr, double)); -DLL_IMPORT void mpf_init_set_si _PROTO ((mpf_ptr, signed long int)); -DLL_IMPORT int mpf_init_set_str _PROTO ((mpf_ptr, __gmp_const char *, int)); -DLL_IMPORT void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int)); -DLL_IMPORT void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); -DLL_IMPORT void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr)); -#ifdef _GMP_H_HAVE_FILE -DLL_IMPORT size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr)); -#endif -DLL_IMPORT void mpf_pow_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); -DLL_IMPORT void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); -DLL_IMPORT void mpf_set _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_set_d _PROTO ((mpf_ptr, double)); -DLL_IMPORT void mpf_set_default_prec _PROTO ((unsigned long int)); -DLL_IMPORT void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int)); -DLL_IMPORT void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int)); -DLL_IMPORT void mpf_set_q _PROTO ((mpf_ptr, mpq_srcptr)); -DLL_IMPORT void mpf_set_si _PROTO ((mpf_ptr, signed long int)); -DLL_IMPORT int mpf_set_str _PROTO ((mpf_ptr, __gmp_const char *, int)); -DLL_IMPORT void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int)); -DLL_IMPORT void mpf_set_z _PROTO ((mpf_ptr, mpz_srcptr)); -DLL_IMPORT size_t mpf_size _PROTO ((mpf_srcptr)); -DLL_IMPORT void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int)); -DLL_IMPORT void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); -DLL_IMPORT void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); -DLL_IMPORT void mpf_trunc _PROTO ((mpf_ptr, mpf_srcptr)); -DLL_IMPORT void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); -DLL_IMPORT void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); -DLL_IMPORT void mpf_urandomb _PROTO ((mpf_t, gmp_randstate_t, unsigned long int)); - -#define mpf_swap __gmpf_swap -DLL_IMPORT void mpf_swap _PROTO ((mpf_ptr, mpf_ptr)); - -#if defined (__cplusplus) -} -#endif -/************ 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) -#define mpn_add_1 __MPN(add_1) -#define mpn_add_n __MPN(add_n) -#define mpn_add_nc __MPN(add_nc) -#define mpn_addmul_1 __MPN(addmul_1) -#define mpn_addsub_n __MPN(addsub_n) -#define mpn_addsub_nc __MPN(addsub_nc) -/* #define mpn_and_n __MPN(and_n) */ -/* #define mpn_andn_n __MPN(andn_n) */ -#define mpn_bdivmod __MPN(bdivmod) -#define mpn_cmp __MPN(cmp) -/* #define mpn_com_n __MPN(com_n) */ -#define mpn_copyd __MPN(copyd) -#define mpn_copyi __MPN(copyi) -#define mpn_divrem __MPN(divrem) -#define mpn_divrem_1 __MPN(divrem_1) -#define mpn_divrem_2 __MPN(divrem_2) -#define mpn_dump __MPN(dump) -#define mpn_gcd __MPN(gcd) -#define mpn_gcd_1 __MPN(gcd_1) -#define mpn_gcdext __MPN(gcdext) -#define mpn_get_str __MPN(get_str) -#define mpn_hamdist __MPN(hamdist) -#define mpn_invert_limb __MPN(invert_limb) -/* #define mpn_ior_n __MPN(ior_n) */ -/* #define mpn_iorn_n __MPN(iorn_n) */ -/* #define mpn_kara_mul_n __MPN(kara_mul_n) internal */ -/* #define mpn_kara_sqr_n __MPN(kara_sqr_n) internal */ -#define mpn_lshift __MPN(lshift) -#define mpn_lshiftc __MPN(lshiftc) -#define mpn_mod_1 __MPN(mod_1) -#define mpn_mul __MPN(mul) -#define mpn_mul_1 __MPN(mul_1) -#define mpn_mul_basecase __MPN(mul_basecase) -#define mpn_mul_n __MPN(mul_n) -#define mpn_perfect_square_p __MPN(perfect_square_p) -#define mpn_popcount __MPN(popcount) -#define mpn_preinv_mod_1 __MPN(preinv_mod_1) -/* #define mpn_nand_n __MPN(nand_n) */ -/* #define mpn_nior_n __MPN(nior_n) */ -#define mpn_random __MPN(random) -#define mpn_random2 __MPN(random2) -#define mpn_rshift __MPN(rshift) -#define mpn_rshiftc __MPN(rshiftc) -#define mpn_scan0 __MPN(scan0) -#define mpn_scan1 __MPN(scan1) -#define mpn_set_str __MPN(set_str) -#define mpn_sqr_basecase __MPN(sqr_basecase) -#define mpn_sqr_n __MPN(sqr_n) -#define mpn_sqrtrem __MPN(sqrtrem) -#define mpn_sub __MPN(sub) -#define mpn_sub_1 __MPN(sub_1) -#define mpn_sub_n __MPN(sub_n) -#define mpn_sub_nc __MPN(sub_nc) -#define mpn_submul_1 __MPN(submul_1) -/* #define mpn_toom3_mul_n __MPN(toom3_mul_n) internal */ -/* #define mpn_toom3_sqr_n __MPN(toom3_sqr_n) internal */ -/* #define mpn_xnor_n __MPN(xnor_n) */ -/* #define mpn_xor_n __MPN(xor_n) */ - -#if defined (__cplusplus) -extern "C" { -#endif - -DLL_IMPORT mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -DLL_IMPORT mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); -DLL_IMPORT mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_add_nc _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t)); - -DLL_IMPORT mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_addmul_1c __MPN(addmul_1c) -DLL_IMPORT mp_limb_t mpn_addmul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); - -DLL_IMPORT mp_limb_t mpn_addsub_n _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int)); -DLL_IMPORT int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_divexact_by3(dst, src, size) mpn_divexact_by3c (dst, src, size, 0) - -#define mpn_divexact_by3c __MPN(divexact_by3c) -DLL_IMPORT mp_limb_t mpn_divexact_by3c _PROTO ((mp_ptr dst, mp_srcptr src, - mp_size_t size, mp_limb_t carry)); - -#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb) - -DLL_IMPORT mp_limb_t mpn_divrem _PROTO((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); - -DLL_IMPORT mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_divrem_1c __MPN(divrem_1c) -DLL_IMPORT mp_limb_t mpn_divrem_1c _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, - mp_limb_t, mp_limb_t)); - -DLL_IMPORT mp_limb_t mpn_divrem_2 _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr)); -DLL_IMPORT void mpn_dump _PROTO ((mp_srcptr, mp_size_t)); -mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); -mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); -DLL_IMPORT size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); -DLL_IMPORT unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); - -#define mpn_jacobi_base __MPN(jacobi_base) -DLL_IMPORT int mpn_jacobi_base _PROTO ((mp_limb_t a, mp_limb_t b, int result_bit1)); - -DLL_IMPORT mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); -DLL_IMPORT mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_mod_1c __MPN(mod_1c) -DLL_IMPORT mp_limb_t mpn_mod_1c _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); - -#define mpn_mod_1_rshift __MPN(mod_1_rshift) -DLL_IMPORT mp_limb_t mpn_mod_1_rshift _PROTO ((mp_srcptr, mp_size_t, unsigned,mp_limb_t)); - -DLL_IMPORT mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_mul_1c __MPN(mul_1c) -DLL_IMPORT mp_limb_t mpn_mul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); - -DLL_IMPORT void mpn_mul_basecase _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); -DLL_IMPORT void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -DLL_IMPORT int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t)); -DLL_IMPORT unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); -DLL_IMPORT void mpn_random _PROTO ((mp_ptr, mp_size_t)); -DLL_IMPORT void mpn_random2 _PROTO ((mp_ptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); -DLL_IMPORT unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int)); -DLL_IMPORT unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int)); -mp_size_t mpn_set_str _PROTO ((mp_ptr, __gmp_const unsigned char *, size_t, int)); -DLL_IMPORT void mpn_sqr_n _PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -DLL_IMPORT void mpn_sqr_basecase _PROTO ((mp_ptr, mp_srcptr, mp_size_t)); -mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); -DLL_IMPORT mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); -DLL_IMPORT mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); -DLL_IMPORT mp_limb_t mpn_sub_nc _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t)); -DLL_IMPORT mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); - -#define mpn_submul_1c __MPN(submul_1c) -DLL_IMPORT mp_limb_t mpn_submul_1c _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); - -#define mpn_tdiv_qr __MPN(tdiv_qr) -DLL_IMPORT void mpn_tdiv_qr _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); - -#if defined (__cplusplus) -} -#endif - -#define mpn_incr_u(p,incr) \ - do { mp_limb_t __x; mp_ptr __p = p; \ - __x = *__p + incr; \ - *__p = __x; \ - if (__x < incr) \ - while (++(*(++__p)) == 0) \ - ; \ - } while (0) - -#define mpn_decr_u(p,incr) \ - do { mp_limb_t __x; mp_ptr __p = p; \ - __x = *__p; \ - *__p = __x - incr; \ - if (__x < incr) \ - while ((*(++__p))-- == 0) \ - ; \ - } while (0) - -#if defined (__GNUC__) || defined (_FORCE_INLINES) -_EXTERN_INLINE mp_limb_t -#if (__STDC__-0) || defined (__cplusplus) -mpn_add_1 (register mp_ptr res_ptr, - register mp_srcptr s1_ptr, - register mp_size_t s1_size, - register mp_limb_t s2_limb) -#else -mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_size_t s1_size; - register mp_limb_t s2_limb; -#endif -{ - register mp_limb_t x; - - x = *s1_ptr++; - s2_limb = x + s2_limb; - *res_ptr++ = s2_limb; - if (s2_limb < x) - { - while (--s1_size != 0) - { - x = *s1_ptr++ + 1; - *res_ptr++ = x; - if (x != 0) - goto fin; - } - - return 1; - } - - fin: - if (res_ptr != s1_ptr) - { - mp_size_t i; - for (i = 0; i < s1_size - 1; i++) - res_ptr[i] = s1_ptr[i]; - } - return 0; -} - -_EXTERN_INLINE mp_limb_t -#if (__STDC__-0) || defined (__cplusplus) -mpn_add (register mp_ptr res_ptr, - register mp_srcptr s1_ptr, - register mp_size_t s1_size, - register mp_srcptr s2_ptr, - register mp_size_t s2_size) -#else -mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_size_t s1_size; - register mp_srcptr s2_ptr; - register mp_size_t s2_size; -#endif -{ - mp_limb_t cy_limb = 0; - - if (s2_size != 0) - cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size); - - if (s1_size - s2_size != 0) - cy_limb = mpn_add_1 (res_ptr + s2_size, - s1_ptr + s2_size, - s1_size - s2_size, - cy_limb); - return cy_limb; -} - -_EXTERN_INLINE mp_limb_t -#if (__STDC__-0) || defined (__cplusplus) -mpn_sub_1 (register mp_ptr res_ptr, - register mp_srcptr s1_ptr, - register mp_size_t s1_size, - register mp_limb_t s2_limb) -#else -mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_size_t s1_size; - register mp_limb_t s2_limb; -#endif -{ - register mp_limb_t x; - - x = *s1_ptr++; - s2_limb = x - s2_limb; - *res_ptr++ = s2_limb; - if (s2_limb > x) - { - while (--s1_size != 0) - { - x = *s1_ptr++; - *res_ptr++ = x - 1; - if (x != 0) - goto fin; - } - - return 1; - } - - fin: - if (res_ptr != s1_ptr) - { - mp_size_t i; - for (i = 0; i < s1_size - 1; i++) - res_ptr[i] = s1_ptr[i]; - } - return 0; -} - -_EXTERN_INLINE mp_limb_t -#if (__STDC__-0) || defined (__cplusplus) -mpn_sub (register mp_ptr res_ptr, - register mp_srcptr s1_ptr, - register mp_size_t s1_size, - register mp_srcptr s2_ptr, - register mp_size_t s2_size) -#else -mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_size_t s1_size; - register mp_srcptr s2_ptr; - register mp_size_t s2_size; -#endif -{ - mp_limb_t cy_limb = 0; - - if (s2_size != 0) - cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size); - - if (s1_size - s2_size != 0) - cy_limb = mpn_sub_1 (res_ptr + s2_size, - s1_ptr + s2_size, - s1_size - s2_size, - cy_limb); - return cy_limb; -} -#endif /* __GNUC__ */ - -/* 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__) -#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) && (SI) == 0 ? mpz_sgn (Z) \ - : __builtin_constant_p (SI) && (SI) > 0 \ - ? _mpz_cmp_ui (Z, (unsigned long int) SI) \ - : _mpz_cmp_si (Z,SI)) -#define mpq_cmp_ui(Q,NUI,DUI) \ - (__builtin_constant_p (NUI) && (NUI) == 0 \ - ? mpq_sgn (Q) : _mpq_cmp_ui (Q,NUI,DUI)) -#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) -#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) ((int) ((z)->_mp_size != 0) & (int) (z)->_mp_d[0]) -#define mpz_even_p(z) (! mpz_odd_p (z)) - - -/* Allow direct user access to numerator and denominator of a mpq_t object. */ -#define mpq_numref(Q) (&((Q)->_mp_num)) -#define mpq_denref(Q) (&((Q)->_mp_den)) - - -/* Compatibility with GMP 2 and earlier. */ -#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize) - -/* 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_mod_ui mpz_fdiv_r_ui -#define mpz_div_2exp mpz_fdiv_q_2exp -#define mpz_mod_2exp mpz_fdiv_r_2exp - -#define gmp_errno __gmp_errno -extern int gmp_errno; - -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, - GMP_ERROR_ALLOCATE = 16, - GMP_ERROR_BAD_STRING = 32, - GMP_ERROR_UNUSED_ERROR -}; - -/* Note: major version number is in mp.h too */ -#define __GNU_MP_VERSION 3 -#define __GNU_MP_VERSION_MINOR 1 -#define __GNU_MP_VERSION_PATCHLEVEL 1 - -#define gmp_version __gmp_version -extern __gmp_const char *gmp_version; - -#define __GMP_H__ -#endif /* __GMP_H__ */ diff --git a/rts/gmp/insert-dbl.c b/rts/gmp/insert-dbl.c deleted file mode 100644 index dc88a56..0000000 --- a/rts/gmp/insert-dbl.c +++ /dev/null @@ -1,98 +0,0 @@ -/* __gmp_insert_double -- convert from array of mp_limb_t to double. - -Copyright (C) 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifdef XDEBUG -#undef _GMP_IEEE_FLOATS -#endif - -#ifndef _GMP_IEEE_FLOATS -#define _GMP_IEEE_FLOATS 0 -#endif - -double -#if __STDC__ -__gmp_scale2 (double d, int exp) -#else -__gmp_scale2 (d, exp) - double d; - int exp; -#endif -{ -#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; - x.s.exp = exp; - if (exp >= 2047) - { - /* Return +-infinity */ - x.s.exp = 2047; - x.s.manl = x.s.manh = 0; - } - else if (exp < 1) - { - x.s.exp = 1; /* smallest exponent (biased) */ - /* Divide result by 2 until we have scaled it to the right IEEE - denormalized number, but stop if it becomes zero. */ - while (exp < 1 && x.d != 0) - { - x.d *= 0.5; - exp++; - } - } - return x.d; - } -#else - { - double factor, r; - - factor = 2.0; - if (exp < 0) - { - factor = 0.5; - exp = -exp; - } - r = d; - if (exp != 0) - { - if ((exp & 1) != 0) - r *= factor; - exp >>= 1; - while (exp != 0) - { - factor *= factor; - if ((exp & 1) != 0) - r *= factor; - exp >>= 1; - } - } - return r; - } -#endif -} diff --git a/rts/gmp/install-sh b/rts/gmp/install-sh deleted file mode 100644 index e9de238..0000000 --- a/rts/gmp/install-sh +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# 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. It can only install one file at a time, a restriction -# shared with many OS's install programs. - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# 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 $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/rts/gmp/longlong.h b/rts/gmp/longlong.h deleted file mode 100644 index 9a12755..0000000 --- a/rts/gmp/longlong.h +++ /dev/null @@ -1,1347 +0,0 @@ -/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. - -Copyright (C) 1991, 1992, 1993, 1994, 1996, 1997, 1999, 2000 Free Software -Foundation, Inc. - -This file is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -This 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 Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this file; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* 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. -*/ - -#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 - -#ifndef _PROTO -#if (__STDC__-0) || defined (__cplusplus) -#define _PROTO(x) x -#else -#define _PROTO(x) () -#endif -#endif - -/* Define auxiliary asm macros. - - 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two - UWtype integers MULTIPLER 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. */ - -/* The CPUs come in alphabetical order below. - - Please add support for more CPUs here, or improve the current support - for the CPUs below! */ - -#if defined (__alpha) && W_TYPE_SIZE == 64 -#if defined (__GNUC__) -#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) -#define UMUL_TIME 18 -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UDItype __di; \ - __di = __MPN(invert_limb) (d); \ - udiv_qrnnd_preinv (q, r, n1, n0, d, __di); \ - } while (0) -#define UDIV_NEEDS_NORMALIZATION 1 -#define UDIV_TIME 220 -long __MPN(count_leading_zeros) (); -#define count_leading_zeros(count, x) \ - ((count) = __MPN(count_leading_zeros) (x)) -#endif /* LONGLONG_STANDALONE */ -#else /* ! __GNUC__ */ -#include -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - (ph) = __UMULH (m0, m1); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#endif /* __alpha */ - -#if defined (__hppa) && W_TYPE_SIZE == 64 -/* We put the result pointer parameter last here, since it makes passing - of the other parameters more efficient. */ -#ifndef LONGLONG_STANDALONE -#define umul_ppmm(wh, wl, u, v) \ - do { \ - UDItype __p0; \ - (wh) = __MPN(umul_ppmm) (u, v, &__p0); \ - (wl) = __p0; \ - } while (0) -extern UDItype __MPN(umul_ppmm) _PROTO ((UDItype, UDItype, UDItype *)); -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { UDItype __r; \ - (q) = __MPN(udiv_qrnnd) (n1, n0, d, &__r); \ - (r) = __r; \ - } while (0) -extern UDItype __MPN(udiv_qrnnd) _PROTO ((UDItype, UDItype, UDItype, UDItype *)); -#define UMUL_TIME 8 -#define UDIV_TIME 60 -#endif /* LONGLONG_STANDALONE */ -#endif /* hppa */ - -#if defined (__ia64) && W_TYPE_SIZE == 64 -#if defined (__GNUC__) -#define umul_ppmm(ph, pl, m0, m1) \ - do { \ - UDItype __m0 = (m0), __m1 = (m1); \ - __asm__ ("xma.hu %0 = %1, %2, f0" \ - : "=e" (ph) \ - : "e" (m0), "e" (m1)); \ - (pl) = __m0 * __m1; \ - } while (0) -#endif -#endif - - -#if defined (__GNUC__) && !defined (NO_ASM) - -/* 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 (__arm__) && 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)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("subs\t%1, %4, %5\n\tsbc\t%0, %2, %3" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "rI" (bh), "r" (al), "rI" (bl)) -#if 1 || defined (__arm_m__) /* `M' series has widening multiply support */ -#define umul_ppmm(xh, xl, a, b) \ - __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b)) -#define smul_ppmm(xh, xl, a, b) \ - __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b)) -#define UMUL_TIME 5 -#else -#define umul_ppmm(xh, xl, a, b) \ - __asm__ ("%@ Inlined umul_ppmm\n" \ - "mov %|r0, %2, lsr #16\n" \ - "mov %|r2, %3, lsr #16\n" \ - "bic %|r1, %2, %|r0, lsl #16\n" \ - "bic %|r2, %3, %|r2, lsl #16\n" \ - "mul %1, %|r1, %|r2\n" \ - "mul %|r2, %|r0, %|r2\n" \ - "mul %|r1, %0, %|r1\n" \ - "mul %0, %|r0, %0\n" \ - "adds %|r1, %|r2, %|r1\n" \ - "addcs %0, %0, #65536\n" \ - "adds %1, %1, %|r1, lsl #16\n" \ - "adc %0, %0, %|r1, lsr #16" \ - : "=&r" (xh), "=r" (xl) \ - : "r" (a), "r" (b) \ - : "r0", "r1", "r2") -#define UMUL_TIME 20 -#endif -#define UDIV_TIME 100 -#endif /* __arm__ */ - -#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" ((USItype)(sh)), "=&g" ((USItype)(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" ((USItype)(sh)), "=&g" ((USItype)(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" ((USItype)(ph)), "=r" ((USItype)(pl)) \ - : "%0" ((USItype)(m0)), "g" ((USItype)(m1))) -#define udiv_qrnnd(q, r, nh, nl, d) \ - __asm__ ("divx %4,%0,%1" \ - : "=g" ((USItype)(q)), "=r" ((USItype)(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 %4,%5,%1\n\taddc %2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "%rM" (ah), "rM" (bh), "%rM" (al), "rM" (bl)) -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ - __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0" \ - : "=r" (sh), "=&r" (sl) \ - : "rM" (ah), "rM" (bh), "rM" (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 -#ifndef LONGLONG_STANDALONE -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { USItype __r; \ - (q) = __MPN(udiv_qrnnd) (&__r, (n1), (n0), (d)); \ - (r) = __r; \ - } while (0) -extern USItype __MPN(udiv_qrnnd) _PROTO ((USItype *, USItype, USItype, USItype)); -#endif /* LONGLONG_STANDALONE */ -#define count_leading_zeros(count, x) \ - do { \ - USItype __tmp; \ - __asm__ ( \ - "ldi 2,%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 */ - -#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 -#define smul_ppmm(xh, xl, m0, m1) \ - do { \ - union {DItype __ll; \ - struct {USItype __h, __l;} __i; \ - } __x; \ - __asm__ ("mr %0,%3" \ - : "=r" (__x.__i.__h), "=r" (__x.__i.__l) \ - : "%1" (m0), "r" (m1)); \ - (xh) = __x.__i.__h; (xl) = __x.__i.__l; \ - } while (0) -#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 %0,%2" \ - : "=r" (__x.__ll) \ - : "0" (__x.__ll), "r" (d)); \ - (q) = __x.__i.__l; (r) = __x.__i.__h; \ - } while (0) -#endif - -#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl %5,%1\n\tadcl %3,%0" \ - : "=r" ((USItype)(sh)), "=&r" ((USItype)(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,%1\n\tsbbl %3,%0" \ - : "=r" ((USItype)(sh)), "=&r" ((USItype)(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, d) \ - __asm__ ("divl %4" \ - : "=a" (q), "=d" (r) \ - : "0" ((USItype)(n0)), "1" ((USItype)(n1)), "rm" ((USItype)(d))) -#define count_leading_zeros(count, x) \ - do { \ - USItype __cbtmp; \ - __asm__ ("bsrl %1,%0" : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ - (count) = __cbtmp ^ 31; \ - } while (0) -#define count_trailing_zeros(count, x) \ - __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x))) -#ifndef UMUL_TIME -#define UMUL_TIME 10 -#endif -#ifndef UDIV_TIME -#define UDIV_TIME 40 -#endif -#endif /* 80x86 */ - -#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" ((USItype)(sh)), "=&d" ((USItype)(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" ((USItype)(sh)), "=&d" ((USItype)(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 (__mc68332__) || defined (mc68332) \ - || defined (__NeXT__) -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("mulu%.l %3,%1:%0" \ - : "=d" ((USItype)(w0)), "=d" ((USItype)(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" ((USItype)(q)), "=d" ((USItype)(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" ((USItype)(q)), "=d" ((USItype)(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" ((USItype)(xh)), "=&d" ((USItype)(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. */ -#if defined (__mc68020__) || defined (mc68020) \ - || defined (__mc68030__) || defined (mc68030) \ - || defined (__mc68040__) || defined (mc68040) \ - || defined (__mc68060__) || defined (mc68060) \ - || defined (__NeXT__) -#define count_leading_zeros(count, x) \ - __asm__ ("bfffo %1{%b2:%b2},%0" \ - : "=d" ((USItype) (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 __GNUC__ > 2 || __GNUC_MINOR__ >= 7 -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) -#else -#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 __GNUC__ > 2 || __GNUC_MINOR__ >= 7 -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmultu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v)) -#else -#define umul_ppmm(w1, w0, u, v) \ - __asm__ ("dmultu %2,%3\n\tmflo %0\n\tmfhi %1" \ - : "=d" (w0), "=d" (w1) : "d" (u), "d" (v)) -#endif -#define UMUL_TIME 20 -#define UDIV_TIME 140 -#endif /* __mips */ - -#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" ((USItype) (count)) \ - : "0" ((USItype) 0), "r" ((USItype) (x))); \ - } while (0) -#endif /* __ns32000__ */ - -/* We should test _IBMR2 here when we add assembly support for the system - vendor compilers. */ -#if (defined (_ARCH_PPC) || defined (_ARCH_PWR) || defined (__powerpc__)) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "%r" (ah), "%r" (al), "rI" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "%r" (ah), "%r" (al), "rI" (bl));\ - else \ - __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %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__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else \ - __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ - } while (0) -#define count_leading_zeros(count, x) \ - __asm__ ("{cntlz|cntlzw} %0,%1" : "=r" (count) : "r" (x)) -#define COUNT_LEADING_ZEROS_0 32 -#if defined (_ARCH_PPC) || defined (__powerpc__) -#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) -#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 (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 64 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - do { \ - if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "%r" (ah), "%r" (al), "rI" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "%r" (ah), "%r" (al), "rI" (bl));\ - else \ - __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %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__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ - : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ - else \ - __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ - : "=r" (sh), "=&r" (sl) \ - : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ - } while (0) -#define count_leading_zeros(count, x) \ - __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) -#define COUNT_LEADING_ZEROS_0 64 -#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) -#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" ((USItype)(sh)), "=&r" ((USItype)(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" ((USItype)(sh)), "=&r" ((USItype)(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" ((USItype)(sh)), "=&r" ((USItype)(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" ((USItype)(sh)), "=&r" ((USItype)(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" ((USItype)(ph)), "=r" ((USItype)(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" ((USItype)(count)) : "r" ((USItype)(x) >> 16)); \ - else \ - { \ - __asm__ ("clz %0,%1" \ - : "=r" ((USItype)(count)) : "r" ((USItype)(x))); \ - (count) += 16; \ - } \ - } while (0) -#endif /* RT/ROMP */ - -#if defined (__sh2__) && 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) -#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__) -/* 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 -#ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */ -#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 -#else -#define UDIV_TIME 60 /* SuperSPARC timing */ -#endif /* 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,0,%0" : "=r" (x) : "r" (count)) -/* 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 { USItype __r; \ - (q) = __MPN(udiv_qrnnd) (&__r, (n1), (n0), (d)); \ - (r) = __r; \ - } while (0) -extern USItype __MPN(udiv_qrnnd) _PROTO ((USItype *, USItype, USItype, USItype)); -#ifndef UDIV_TIME -#define UDIV_TIME 140 -#endif -#endif /* LONGLONG_STANDALONE */ -#endif /* udiv_qrnnd */ -#endif /* __sparc__ */ - -#if defined (__vax__) && W_TYPE_SIZE == 32 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ - __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \ - : "=g" ((USItype)(sh)), "=&g" ((USItype)(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" ((USItype)(sh)), "=&g" ((USItype)(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) -#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" ((unsigned int)(sh)), "=&r" ((unsigned int)(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" ((unsigned int)(sh)), "=&r" ((unsigned int)(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__ */ - - -#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 - - -/* Note the prototypes are under !define(umul_ppmm) etc too, since the HPPA - versions above are different and we don't want to conflict. */ - -#if ! defined (umul_ppmm) && HAVE_NATIVE_mpn_umul_ppmm -#define mpn_umul_ppmm __MPN(umul_ppmm) -extern mp_limb_t mpn_umul_ppmm _PROTO ((mp_limb_t *, mp_limb_t, mp_limb_t)); -#define umul_ppmm(wh, wl, u, v) \ - do { \ - mp_limb_t __umul_ppmm__p0; \ - (wh) = __MPN(umul_ppmm) (&__umul_ppmm__p0, \ - (mp_limb_t) (u), (mp_limb_t) (v)); \ - (wl) = __umul_ppmm__p0; \ - } while (0) -#endif - -#if ! defined (udiv_qrnnd) && HAVE_NATIVE_mpn_udiv_qrnnd -#define mpn_udiv_qrnnd __MPN(udiv_qrnnd) -extern mp_limb_t mpn_udiv_qrnnd _PROTO ((mp_limb_t *, - mp_limb_t, mp_limb_t, mp_limb_t)); -#define udiv_qrnnd(q, r, n1, n0, d) \ - do { \ - mp_limb_t __udiv_qrnnd__r; \ - (q) = mpn_udiv_qrnnd (&__udiv_qrnnd__r, \ - (mp_limb_t) (n1), (mp_limb_t) (n0), (mp_limb_t) d); \ - (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) - (__x > (al)); \ - (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. */ -#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; \ - __d1 = __ll_highpart (d); \ - __d0 = __ll_lowpart (d); \ - \ - __q1 = (n1) / __d1; \ - __r1 = (n1) - __q1 * __d1; \ - __m = (UWtype) __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 = (UWtype) __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) = (UWtype) __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) -#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) -extern -#if __STDC__ -const -#endif -unsigned char __clz_tab[]; -#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) ? 0 : __BITS4) \ - : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\ - } \ - else \ - { \ - for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ - if (((__xr >> __a) & 0xff) != 0) \ - break; \ - } \ - \ - (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ - } while (0) -/* This version gives a well-defined value for zero. */ -#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE -#define COUNT_LEADING_ZEROS_NEED_CLZ_TAB -#endif - -#if !defined (count_trailing_zeros) -/* Define count_trailing_zeros using count_leading_zeros. The latter might be - defined in asm, but if it is not, the C version above is good enough. */ -#define count_trailing_zeros(count, x) \ - do { \ - UWtype __ctz_x = (x); \ - UWtype __ctz_c; \ - count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ - (count) = W_TYPE_SIZE - 1 - __ctz_c; \ - } while (0) -#endif - -#ifndef UDIV_NEEDS_NORMALIZATION -#define UDIV_NEEDS_NORMALIZATION 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 - -/* count_trailing_zeros is often on the slow side, so make that the default */ -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 15 /* cycles */ -#endif - - diff --git a/rts/gmp/ltconfig b/rts/gmp/ltconfig deleted file mode 100644 index 6d8cf33..0000000 --- a/rts/gmp/ltconfig +++ /dev/null @@ -1,3109 +0,0 @@ -#! /bin/sh - -# ltconfig - Create a system-specific libtool. -# Copyright (C) 1996-2000 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 1996 -# -# 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# A lot of this script is taken from autoconf-2.10. - -# Check that we are running under the correct shell. -SHELL=${CONFIG_SHELL-/bin/sh} -echo=echo -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell. - exec "$SHELL" "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat </dev/null`} - case X$UNAME in - *-DOS) PATH_SEPARATOR=';' ;; - *) PATH_SEPARATOR=':' ;; - esac -fi - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -if test "X${echo_test_string+set}" != Xset; then - # find a string as large as possible, as long as the shell can cope with it - for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do - # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... - if (echo_test_string="`eval $cmd`") 2>/dev/null && - echo_test_string="`eval $cmd`" && - (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then - break - fi - done -fi - -if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - : -else - # The Solaris, AIX, and Digital Unix default echo programs unquote - # backslashes. This makes it impossible to quote backslashes using - # echo "$something" | sed 's/\\/\\\\/g' - # - # So, first we look for a working echo in the user's PATH. - - IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" - for dir in $PATH /usr/ucb; do - if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && - test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$dir/echo" - break - fi - done - IFS="$save_ifs" - - if test "X$echo" = Xecho; then - # We didn't find a better echo, so look for alternatives. - if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # This shell has a builtin print -r that does the trick. - echo='print -r' - elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && - test "X$CONFIG_SHELL" != X/bin/ksh; then - # If we have ksh, try running ltconfig again with it. - ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" - export ORIGINAL_CONFIG_SHELL - CONFIG_SHELL=/bin/ksh - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} - else - # Try using printf. - echo='printf "%s\n"' - if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && - echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - # Cool, printf works - : - elif echo_testing_string=`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" - export CONFIG_SHELL - SHELL="$CONFIG_SHELL" - export SHELL - echo="$CONFIG_SHELL $0 --fallback-echo" - elif echo_testing_string=`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null` && - test "X$echo_testing_string" = 'X\t' && - echo_testing_string=`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && - test "X$echo_testing_string" = "X$echo_test_string"; then - echo="$CONFIG_SHELL $0 --fallback-echo" - else - # maybe with a smaller string... - prev=: - - for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do - if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then - break - fi - prev="$cmd" - done - - if test "$prev" != 'sed 50q "$0"'; then - echo_test_string=`eval $prev` - export echo_test_string - exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} - else - # Oops. We lost completely, so just stick with echo. - echo=echo - fi - fi - fi - fi -fi - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed='sed -e s/^X//' -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' - -# The name of this program. -progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` - -# Constants: -PROGRAM=ltconfig -PACKAGE=libtool -VERSION=1.3c -TIMESTAMP=" (1.696 2000/03/14 20:22:42)" -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -rm="rm -f" - -help="Try \`$progname --help' for more information." - -# Global variables: -default_ofile=libtool -can_build_shared=yes -enable_shared=yes -# All known linkers require a `.a' archive for static linking (except M$VC, -# which needs '.lib'). -enable_static=yes -enable_fast_install=yes -enable_dlopen=unknown -enable_win32_dll=no -pic_mode=default -ltmain= -silent= -srcdir= -ac_config_guess= -ac_config_sub= -host= -build=NONE -nonopt=NONE -ofile="$default_ofile" -verify_host=yes -with_gcc=no -with_gnu_ld=no -need_locks=yes -ac_ext=c -libext=a -cache_file= - -old_AR="$AR" -old_CC="$CC" -old_CFLAGS="$CFLAGS" -old_CPPFLAGS="$CPPFLAGS" -old_LDFLAGS="$LDFLAGS" -old_LIBS="$LIBS" -old_MAGIC="$MAGIC" -old_LD="$LD" -old_LN_S="$LN_S" -old_NM="$NM" -old_RANLIB="$RANLIB" -old_STRIP="$STRIP" -old_AS="$AS" -old_DLLTOOL="$DLLTOOL" -old_OBJDUMP="$OBJDUMP" -old_OBJEXT="$OBJEXT" -old_EXEEXT="$EXEEXT" -old_reload_Flag="$reload_flag" -old_deplibs_check_method="$deplibs_check_method" -old_file_magic_cmd="$file_magic_cmd" - -# Parse the command line options. -args= -prev= -for option -do - case "$option" in - -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - eval "$prev=\$option" - prev= - continue - fi - - case "$option" in - --help) cat <&2 - echo "$help" 1>&2 - exit 1 - ;; - - *) - if test -z "$ltmain"; then - ltmain="$option" - elif test -z "$host"; then -# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 -# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then -# echo "$progname: warning \`$option' is not a valid host type" 1>&2 -# fi - host="$option" - else - echo "$progname: too many arguments" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac -done - -if test -z "$ltmain"; then - echo "$progname: you must specify a LTMAIN file" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -if test ! -f "$ltmain"; then - echo "$progname: \`$ltmain' does not exist" 1>&2 - echo "$help" 1>&2 - exit 1 -fi - -# Quote any args containing shell metacharacters. -ltconfig_args= -for arg -do - case "$arg" in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ltconfig_args="$ltconfig_args '$arg'" ;; - *) ltconfig_args="$ltconfig_args $arg" ;; - esac -done - -# A relevant subset of AC_INIT. - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 5 compiler messages saved in config.log -# 6 checking for... messages and results -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 -fi -exec 5>>./config.log - -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "X${LC_ALL+set}" = Xset; then LC_ALL=C; export LC_ALL; fi -if test "X${LANG+set}" = Xset; then LANG=C; export LANG; fi - -if test -n "$cache_file" && test -r "$cache_file"; then - echo "loading cache $cache_file within ltconfig" - . $cache_file -fi - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi - -if test -z "$srcdir"; then - # Assume the source directory is the same one as the path to LTMAIN. - srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` - test "$srcdir" = "$ltmain" && srcdir=. -fi - -trap "$rm conftest*; exit 1" 1 2 15 -if test "$verify_host" = yes; then - # Check for config.guess and config.sub. - ac_aux_dir= - for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/config.guess; then - ac_aux_dir=$ac_dir - break - fi - done - if test -z "$ac_aux_dir"; then - echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 - echo "$help" 1>&2 - exit 1 - fi - ac_config_guess=$ac_aux_dir/config.guess - ac_config_sub=$ac_aux_dir/config.sub - - # Make sure we can run config.sub. - if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : - else - echo "$progname: cannot run $ac_config_sub" 1>&2 - echo "$help" 1>&2 - exit 1 - fi - - echo $ac_n "checking host system type""... $ac_c" 1>&6 - - host_alias=$host - case "$host_alias" in - "") - if host_alias=`$SHELL $ac_config_guess`; then : - else - echo "$progname: cannot guess host type; you must specify one" 1>&2 - echo "$help" 1>&2 - exit 1 - fi ;; - esac - host=`$SHELL $ac_config_sub $host_alias` - echo "$ac_t$host" 1>&6 - - # Make sure the host verified. - test -z "$host" && exit 1 - - # Check for the build system type - echo $ac_n "checking build system type... $ac_c" 1>&6 - - build_alias=$build - case "$build_alias" in - NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; - esac - - build=`$SHELL $ac_config_sub $build_alias` - build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - echo "$ac_t""$build" 1>&6 - -elif test -z "$host"; then - echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 - echo "$help" 1>&2 - exit 1 -else - host_alias=$host - build_alias=$host_alias - build=$host -fi - -if test x"$host" != x"$build"; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi - -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - -# Transform linux* to *-*-linux-gnu*, to support old configure scripts. -case "$host_os" in -linux-gnu*) ;; -linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` -esac - -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 "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR cru $oldlib$oldobjs$old_deplibs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -# Set sane defaults for various variables -test -z "$AR" && AR=ar -test -z "$AS" && AS=as -test -z "$CC" && CC=cc -test -z "$DLLTOOL" && DLLTOOL=dlltool -test -z "$MAGIC" && MAGIC=file -test -z "$LD" && LD=ld -test -z "$LN_S" && LN_S="ln -s" -test -z "$NM" && NM=nm -test -z "$OBJDUMP" && OBJDUMP=objdump -test -z "$RANLIB" && RANLIB=: -test -z "$STRIP" && STRIP=: -test -z "$objext" && objext=o - -echo $ac_n "checking for objdir... $ac_c" 1>&6 -rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - objdir=_libs -fi -rmdir .libs 2>/dev/null -echo "$ac_t$objdir" 1>&6 - -# Allow CC to be a program name with arguments. -set dummy $CC -compiler="$2" - -# We assume here that the value for ac_cv_prog_cc_pic will not be cached -# in isolation, and that seeing it set (from the cache) indicates that -# the associated values are set (in the cache) correctly too. -echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 -echo "$progname:563:checking for $compiler option to produce PIC" 1>&5 -if test "X${ac_cv_prog_cc_pic+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_cv_prog_cc_pic= - ac_cv_prog_cc_shlib= - ac_cv_prog_cc_wl= - ac_cv_prog_cc_static= - ac_cv_prog_cc_no_builtin= - ac_cv_prog_cc_can_build_shared=$can_build_shared - - if test "$with_gcc" = yes; then - ac_cv_prog_cc_wl='-Wl,' - ac_cv_prog_cc_static='-static' - - case "$host_os" in - beos* | irix5* | irix6* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - aix*) - # Below there is a dirty hack to force normal static linking with -ldl - # The problem is because libdl dynamically linked with both libc and - # libC (AIX C++ library), which obviously doesn't included in libraries - # list by gcc. This cause undefined symbols with -static flags. - # This hack allows C programs to be linked with "-static -ldl", but - # we not sure about C++ programs. - ac_cv_prog_cc_static="$ac_cv_prog_cc_static ${ac_cv_prog_cc_wl}-lC" - ;; - cygwin* | mingw* | os2*) - # 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). - ac_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - ac_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' - ;; - sysv4*MP*) - if test -d /usr/nec; then - ac_cv_prog_cc_pic=-Kconform_pic - fi - ;; - *) - ac_cv_prog_cc_pic='-fPIC' - ;; - esac - else - # PORTME Check for PIC flags for the system compiler. - case "$host_os" in - aix3* | aix4*) - # All AIX code is PIC. - ac_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' - ;; - - hpux9* | hpux10* | hpux11*) - # Is there a better ac_cv_prog_cc_static that works with the bundled CC? - ac_cv_prog_cc_wl='-Wl,' - ac_cv_prog_cc_static="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - ac_cv_prog_cc_pic='+Z' - ;; - - irix5* | irix6*) - ac_cv_prog_cc_wl='-Wl,' - ac_cv_prog_cc_static='-non_shared' - # PIC (with -KPIC) is the default. - ;; - - cygwin* | mingw* | os2*) - # 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). - ac_cv_prog_cc_pic='-DDLL_EXPORT' - ;; - - osf3* | osf4* | osf5*) - # All OSF/1 code is PIC. - ac_cv_prog_cc_wl='-Wl,' - ac_cv_prog_cc_static='-non_shared' - ;; - - sco3.2v5*) - ac_cv_prog_cc_pic='-Kpic' - ac_cv_prog_cc_static='-dn' - ac_cv_prog_cc_shlib='-belf' - ;; - - solaris*) - ac_cv_prog_cc_pic='-KPIC' - ac_cv_prog_cc_static='-Bstatic' - ac_cv_prog_cc_wl='-Wl,' - ;; - - sunos4*) - ac_cv_prog_cc_pic='-PIC' - ac_cv_prog_cc_static='-Bstatic' - ac_cv_prog_cc_wl='-Qoption ld ' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - ac_cv_prog_cc_pic='-KPIC' - ac_cv_prog_cc_static='-Bstatic' - ac_cv_prog_cc_wl='-Wl,' - ;; - - uts4*) - ac_cv_prog_cc_pic='-pic' - ac_cv_prog_cc_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - ac_cv_prog_cc_pic='-Kconform_pic' - ac_cv_prog_cc_static='-Bstatic' - fi - ;; - - *) - ac_cv_prog_cc_can_build_shared=no - ;; - esac - fi -fi -if test -z "$ac_cv_prog_cc_pic"; then - echo "$ac_t"none 1>&6 -else - echo "$ac_t""$ac_cv_prog_cc_pic" 1>&6 - - # Check to make sure the pic_flag actually works. - echo $ac_n "checking if $compiler PIC flag $ac_cv_prog_cc_pic works... $ac_c" 1>&6 - echo "$progname:693:checking that $compiler PIC flag $ac_cv_prog_cc_pic works." 1>&5 - if test "X${ac_cv_prog_cc_pic_works+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - ac_cv_prog_cc_pic_works=yes - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $ac_cv_prog_cc_pic -DPIC" - if { (eval echo $progname:702: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then - # Append any warnings to the config.log. - cat conftest.err 1>&5 - - case "$host_os" in - hpux9* | hpux10* | hpux11*) - # On HP-UX, both CC and GCC only warn that PIC is supported... then - # they create non-PIC objects. So, if there were any warnings, we - # assume that PIC is not supported. - if test -s conftest.err; then - ac_cv_prog_cc_pic_works=no - ac_cv_prog_cc_can_build_shared=no - ac_cv_prog_cc_pic= - else - ac_cv_prog_cc_pic_works=yes - ac_cv_prog_cc_pic=" $ac_cv_prog_cc_pic" - fi - ;; - *) - ac_cv_prog_cc_pic_works=yes - ac_cv_prog_cc_pic=" $ac_cv_prog_cc_pic" - ;; - esac - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - ac_cv_prog_cc_pic_works=no - ac_cv_prog_cc_can_build_shared=no - ac_cv_prog_cc_pic= - fi - CFLAGS="$save_CFLAGS" - $rm conftest* - fi - # Belt *and* braces to stop my trousers falling down: - if test "X$ac_cv_prog_cc_pic_works" = Xno; then - ac_cv_prog_cc_pic= - ac_cv_prog_cc_can_build_shared=no - fi - echo "$ac_t""$ac_cv_prog_cc_pic_works" 1>&6 -fi - -# Check for any special shared library compilation flags. -if test -n "$ac_cv_prog_cc_shlib"; then - echo "$progname: warning: \`$CC' requires \`$ac_cv_prog_cc_shlib' to build shared libraries" 1>&2 - if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$ac_cv_prog_cc_shlib[ ]" >/dev/null; then : - else - echo "$progname: add \`$ac_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2 - ac_cv_prog_cc_can_build_shared=no - fi -fi - -echo $ac_n "checking if $compiler static flag $ac_cv_prog_cc_static works... $ac_c" 1>&6 -echo "$progname:754: checking if $compiler static flag $ac_cv_prog_cc_static works" >&5 -if test "X${ac_cv_prog_cc_static_works+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - $rm conftest* - echo 'main(){return(0);}' > conftest.c - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $ac_cv_prog_cc_static" - if { (eval echo $progname:762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - ac_cv_prog_cc_static_works=yes - else - ac_cv_prog_cc_static_works=no - ac_cv_prog_cc_static= - fi - LDFLAGS="$save_LDFLAGS" - $rm conftest* -fi -# Belt *and* braces to stop my trousers falling down: -if test "X$ac_cv_prog_cc_static_works" = Xno; then - ac_cv_prog_cc_static= -fi -echo "$ac_t""$ac_cv_prog_cc_static_works" 1>&6 -pic_flag="$ac_cv_prog_cc_pic" -special_shlib_compile_flags="$ac_cv_prog_cc_shlib" -wl="$ac_cv_prog_cc_wl" -link_static_flag="$ac_cv_prog_cc_static" -no_builtin_flag="$ac_cv_prog_cc_no_builtin" -can_build_shared="$ac_cv_prog_cc_can_build_shared" - -# Check to see if options -o and -c are simultaneously supported by compiler -echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 -$rm -r conftest 2>/dev/null -mkdir conftest -cd conftest -$rm conftest* -echo "int some_variable = 0;" > conftest.c -mkdir out -# According to Tom Tromey, Ian Lance Taylor reported there are C compilers -# that will create temporary files in the current directory regardless of -# the output directory. Thus, making CWD read-only will cause this test -# to fail, enabling locking or at least warning the user not to do parallel -# builds. -chmod -w . -save_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -o out/conftest2.o" -echo "$progname:799: checking if $compiler supports -c -o file.o" >&5 -if { (eval echo $progname:800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s out/conftest.err; then - echo "$ac_t"no 1>&6 - compiler_c_o=no - else - echo "$ac_t"yes 1>&6 - compiler_c_o=yes - fi -else - # Append any errors to the config.log. - cat out/conftest.err 1>&5 - compiler_c_o=no - echo "$ac_t"no 1>&6 -fi -CFLAGS="$save_CFLAGS" -chmod u+w . -$rm conftest* out/* -rmdir out -cd .. -rmdir conftest -$rm -r conftest 2>/dev/null - -if test x"$compiler_c_o" = x"yes"; then - # Check to see if we can write to a .lo - echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -c -o conftest.lo" - echo "$progname:832: checking if $compiler supports -c -o file.lo" >&5 -if { (eval echo $progname:833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - compiler_o_lo=no - else - echo "$ac_t"yes 1>&6 - compiler_o_lo=yes - fi - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - compiler_o_lo=no - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* -else - compiler_o_lo=no -fi - -# Check to see if we can do hard links to lock some files if needed -hard_links="nottested" -if test "$compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&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 - echo "$ac_t$hard_links" 1>&6 - $rm conftest* - if test "$hard_links" = no; then - echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 - need_locks=warn - fi -else - need_locks=no -fi - -if test "$with_gcc" = yes; then - # Check to see if options -fno-rtti -fno-exceptions are supported by compiler - echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 - $rm conftest* - echo "int some_variable = 0;" > conftest.c - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" - echo "$progname:884: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 - if { (eval echo $progname:885: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then - - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - echo "$ac_t"no 1>&6 - compiler_rtti_exceptions=no - else - echo "$ac_t"yes 1>&6 - compiler_rtti_exceptions=yes - fi - else - # Append any errors to the config.log. - cat conftest.err 1>&5 - compiler_rtti_exceptions=no - echo "$ac_t"no 1>&6 - fi - CFLAGS="$save_CFLAGS" - $rm conftest* - - if test "$compiler_rtti_exceptions" = "yes"; then - no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' - else - no_builtin_flag=' -fno-builtin' - fi - -fi - -# See if the linker supports building shared libraries. -echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 - -allow_undefined_flag= -no_undefined_flag= -need_lib_prefix=unknown -need_version=unknown -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -archive_cmds= -archive_expsym_cmds= -old_archive_from_new_cmds= -old_archive_from_expsyms_cmds= -striplib= -old_striplib= -export_dynamic_flag_spec= -whole_archive_flag_spec= -thread_safe_flag_spec= -hardcode_into_libs=no -hardcode_libdir_flag_spec= -hardcode_libdir_separator= -hardcode_direct=no -hardcode_minus_L=no -hardcode_shlibpath_var=unsupported -runpath_var= -link_all_deplibs=unknown -always_export_symbols=no -export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' -# 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 egrep regular expression 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_" -# 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. -extract_expsyms_cmds= - -case "$host_os" in -cygwin* | mingw*) - # 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 "$with_gcc" != yes; then - with_gnu_ld=no - fi - ;; - -esac - -ld_shlibs=yes -if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # See if GNU ld supports shared libraries. - case "$host_os" in - aix3* | aix4*) - # On AIX, the GNU linker is very broken - ld_shlibs=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - ;; - - amigaos*) - 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 cru $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can use - # them. - ld_shlibs=no - ;; - - beos*) - if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $linker_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw*) - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - allow_undefined_flag=unsupported - always_export_symbols=yes - - extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ - sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/impgen.c~ - test -f $output_objdir/impgen.exe || (cd $output_objdir && \ - if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ - else $CC -o impgen impgen.c ; fi)~ - $output_objdir/impgen $dir/$soname > $output_objdir/$soname-def' - - old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' - - # cygwin and mingw dlls have different entry points and sets of symbols - # to exclude. - # FIXME: what about values for MSVC? - dll_entry=__cygwin_dll_entry@12 - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ - case "$host_os" in - mingw*) - # mingw values - dll_entry=_DllMainCRTStartup@12 - dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ - ;; - esac - - # mingw and cygwin differ, and it's simplest to just exclude the union - # of the two symbol sets. - dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 - - # recent cygwin and mingw systems supply a stub DllMain which the user - # can override, but on older systems we have to supply one (in ltdll.c) - if test "x$lt_cv_need_dllmain" = "xyes"; then - ltdll_obj='$output_objdir/$soname-ltdll.'"$objext " - ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $output_objdir/$soname-ltdll.c~ - test -f $output_objdir/$soname-ltdll.$objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' - else - ltdll_obj= - ltdll_cmds= - fi - - # Extract the symbol export list from an `--export-all' def file, - # then regenerate the def file from the symbol export list, so that - # the compiled dll only exports the symbol export list. - # Be careful not to strip the DATA tag left be newer dlltools. - export_symbols_cmds="$ltdll_cmds"' - $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ - sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' - - # If DATA tags from a recent dlltool are present, honour them! - archive_expsym_cmds='echo EXPORTS > $output_objdir/$soname-def~ - _lt_hint=1; - cat $export_symbols | while read symbol; do - set dummy \$symbol; - case \$# in - 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; - *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; - esac; - _lt_hint=`expr 1 + \$_lt_hint`; - done~ - '"$ltdll_cmds"' - $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $lib '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ - $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $lib '$ltdll_obj'$libobjs $deplibs $compiler_flags~ - $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ - $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $lib '$ltdll_obj'$libobjs $deplibs $compiler_flags' - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - 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 - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <&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. - -EOF - elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $linker_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $linker_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - 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 | egrep ': supported targets:.* elf' > /dev/null; then - 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 - - if test "$ld_shlibs" = yes; then - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - case $host_os in - cygwin* | mingw*) - # dlltool doesn't understand --whole-archive et. al. - whole_archive_flag_spec= - ;; - *) - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - ;; - esac - 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 cru $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 "$with_gcc" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix4*) - hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' - hardcode_libdir_separator=':' - if test "$with_gcc" = yes; then - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct=yes - 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 - shared_flag='-shared' - else - shared_flag='${wl}-bM:SRE' - hardcode_direct=yes - fi - allow_undefined_flag=' ${wl}-berok' - archive_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' - case "$host_os" in aix4.[01]|aix4.[01].*) - # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on - always_export_symbols=yes ;; - esac - ;; - - amigaos*) - 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 cru $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - # see comment about different semantics on the GNU ld section - ld_shlibs=no - ;; - - cygwin* | mingw*) - # 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. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''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' - fix_srcfile_path='`cygpath -w $srcfile`' - ;; - - freebsd1*) - ld_shlibs=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*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9* | hpux10* | hpux11*) - case "$host_os" in - hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; - *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; - esac - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_minus_L=yes # Not in the search PATH, but as the default - # location of the library. - export_dynamic_flag_spec='${wl}-E' - ;; - - irix5* | irix6*) - if test "$with_gcc" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - link_all_deplibs=yes - ;; - - 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='${wl}-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - openbsd*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$with_gcc" = yes; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$with_gcc" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - sco3.2v5*) - 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 - ;; - - solaris*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - 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' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case "$host_os" in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv5*) - no_undefined_flag=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - 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' - hardcode_libdir_flag_spec= - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - 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.2uw2*) - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=no - hardcode_shlibpath_var=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - unixware7*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac -fi -echo "$ac_t$ld_shlibs" 1>&6 -test "$ld_shlibs" = no && can_build_shared=no - -# Check hardcoding attributes. -echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || \ - test -n "$runpath_var"; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct" != no && - # 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 "$hardcode_shlibpath_var" != no && - test "$hardcode_minus_L" != no; 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 -echo "$ac_t$hardcode_action" 1>&6 - -echo $ac_n "checking whether stripping libraries is possible... $ac_c" 1>&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" - echo "${ac_t}yes" 1>&6 -else - echo "${ac_t}no" 1>&6 -fi - -reload_cmds='$LD$reload_flag -o $output$reload_objs' -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -# PORTME Fill in your ld.so characteristics -library_names_spec= -libname_spec='lib$name' -soname_spec= -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" -sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" - -echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 -case "$host_os" in -aix3*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}.so$major' - ;; - -aix4*) - version_type=linux - # AIX has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - # We preserve .a as extension for shared libraries though AIX4.2 - # and later linker supports .so - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' - shlibpath_var=LIBPATH - ;; - -amigaos*) - 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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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' - ;; - -beos*) - library_names_spec='${libname}.so' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - -bsdi4*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$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" - export_dynamic_flag_spec=-rdynamic - # 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*) - version_type=windows - need_version=no - need_lib_prefix=no - if test "$with_gcc" = yes; then - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' - else - library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' - fi - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - -freebsd1*) - dynamic_linker=no - ;; - -freebsd*) - objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` - version_type=freebsd-$objformat - case "$version_type" in - freebsd-elf*) - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' - need_version=yes - ;; - 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 - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - 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. - dynamic_linker="$host_os dld.sl" - version_type=sunos - need_lib_prefix=no - need_version=no - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' - soname_spec='${libname}${release}.sl$major' - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6*) - version_type=irix - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}.so.$major' - library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' - case "$host_os" in - irix5*) - libsuff= shlibsuff= - ;; - *) - case "$LD" in # libtool.m4 will add one of these switches to LD - *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 ") 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}" - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux-gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # 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 - - if test -f /lib/ld.so.1; then - dynamic_linker='GNU ld.so' - else - # Only the GNU ld.so supports shared libraries on MkLinux. - case "$host_cpu" in - powerpc*) dynamic_linker=no ;; - *) dynamic_linker='Linux ld.so' ;; - esac - fi - ;; - -netbsd*) - version_type=sunos - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' - soname_spec='${libname}${release}.so$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - ;; - -openbsd*) - version_type=sunos - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - need_version=no - fi - library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - ;; - -os2*) - libname_spec='$name' - need_lib_prefix=no - library_names_spec='$libname.dll $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_version=no - soname_spec='${libname}${release}.so' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' - 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" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}.so$major' - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$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}.so$versuffix ${libname}.so$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - case "$host_vendor" in - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' - soname_spec='${libname}${release}.so$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' - soname_spec='$libname.so.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$ac_t$dynamic_linker" 1>&6 -test "$dynamic_linker" = no && can_build_shared=no - -# Check for command to grab the raw symbol name followed by C symbol from nm. -echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 - -# 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]*\)' - -# Transform the above into a raw symbol and a C symbol. -symxfrm='\1 \2\3 \3' - -# Transform an extracted symbol line into a proper C declaration -global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" - -# Define system-specific variables. -case "$host_os" in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw*) - symcode='[ABCDGISTW]' - ;; -hpux*) # Its linker distinguishes data from code symbols - global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" - ;; -irix*) - symcode='[BCDEGRST]' - ;; -solaris* | sysv5*) - symcode='[BDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# Handle CRLF in mingw too chain -opt_cr= -case "$host_os" in -mingw*) - opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then - symcode='[ABCDGISTW]' -fi - -# Try without a prefix undercore, then with it. -for ac_symprfx in "" "_"; do - - # Write the raw and C identifiers. -global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" - - # Check to see that the pipe works correctly. - pipe_works=no - $rm conftest* - cat > conftest.c <&5 - if { (eval echo $progname:1868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then - # Now try to grab the symbols. - nlist=conftest.nm - if { echo "$progname:1871: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && 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 egrep ' nm_test_var$' "$nlist" >/dev/null; then - if egrep ' nm_test_func$' "$nlist" >/dev/null; then - cat < conftest.c -#ifdef __cplusplus -extern "C" { -#endif - -EOF - # Now generate the symbol file. - eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' - - cat <> conftest.c -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{ -EOF - sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c - cat <<\EOF >> conftest.c - {0, (lt_ptr_t) 0} -}; - -#ifdef __cplusplus -} -#endif -EOF - # Now try linking the two files. - mv conftest.$objext conftstm.$objext - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="conftstm.$objext" - CFLAGS="$CFLAGS$no_builtin_flag" - if { (eval echo $progname:1923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then - pipe_works=yes - else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - LIBS="$save_LIBS" - 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 $global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.c >&5 - fi - $rm conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - global_symbol_pipe= - fi -done -if test "$pipe_works" = yes; then - echo "${ac_t}ok" 1>&6 -else - echo "${ac_t}failed" 1>&6 -fi - -if test -z "$global_symbol_pipe"; then - global_symbol_to_cdecl= -fi - -# Report the final consequences. -echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 - -# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in -# configure.in, otherwise build static only libraries. -case "$host_os" in -cygwin* | mingw* | os2*) - if test x$can_build_shared = xyes; then - test x$enable_win32_dll = xno && can_build_shared=no - echo "checking if package supports dlls... $can_build_shared" 1>&6 - fi -;; -esac - -echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 -test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - -aix4*) - test "$enable_shared" = yes && enable_static=no - ;; -esac - -echo "$ac_t$enable_shared" 1>&6 - -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes - -echo "checking whether to build static libraries... $enable_static" 1>&6 - -if test "$hardcode_action" = relink || test "$hardcode_into_libs" = all; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -# Check whether we must set pic_mode to default -test -z "$pic_flag" && pic_mode=default -# On Cygwin there's no "real" PIC flag so we must build both object types -case "$host_os" in -cygwin* | mingw* | os2*) - pic_mode=default - ;; -esac -if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else -if test "X${lt_cv_dlopen+set}" != Xset; then - lt_cv_dlopen=no lt_cv_dlopen_libs= -echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "$progname:2032: checking for dlopen in -ldl" >&5 -if test "X${ac_cv_lib_dl_dlopen+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldl $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_lib_dl_dlopen=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_lib_dl_dlopen=no -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if test "X$ac_cv_lib_dl_dlopen" = Xyes; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for dlopen""... $ac_c" 1>&6 -echo "$progname:2071: checking for dlopen" >&5 -if test "X${ac_cv_func_dlopen+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen(); - -int main() { - -/* 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_dlopen) || defined (__stub___dlopen) -choke me -#else -dlopen(); -#endif - -; return 0; } -EOF -if { (eval echo $progname:2101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_func_dlopen=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_func_dlopen=no -fi -rm -f conftest* -fi -if test "X$ac_cv_func_dlopen" = Xyes; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dlopen" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 -echo "$progname:2118: checking for dld_link in -ldld" >&5 -if test "X${ac_cv_lib_dld_dld_link+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldld $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_lib_dld_dld_link=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_lib_dld_dld_link=no -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if test "X$ac_cv_lib_dld_dld_link" = Xyes; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for shl_load""... $ac_c" 1>&6 -echo "$progname:2157: checking for shl_load" >&5 -if test "X${ac_cv_func_shl_load+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -/* Override any gcc2 internal prototype to avoid an error. */ -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char shl_load(); - -int main() { - -/* 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_shl_load) || defined (__stub___shl_load) -choke me -#else -shl_load(); -#endif - -; return 0; } -EOF -if { (eval echo $progname:2187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_func_shl_load=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_func_shl_load=no -fi -rm -f conftest* -fi - -if test "X$ac_cv_func_shl_load" = Xyes; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="shl_load" -else - echo "$ac_t""no" 1>&6 -echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "$progname:2205: checking for shl_load in -ldld" >&5 -if test "X${ac_cv_lib_dld_shl_load+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldld $LIBS" -cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then - rm -rf conftest* - ac_cv_lib_dld_shl_load=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - ac_cv_lib_dld_shl_load=no -fi -rm -f conftest* -LIBS="$ac_save_LIBS" - -fi -if test "X$ac_cv_lib_dld_shl_load" = Xyes; then - echo "$ac_t""yes" 1>&6 - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - echo "$ac_t""no" 1>&6 -fi - - -fi - - -fi - - -fi - - -fi - -fi - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - fi - - case "$lt_cv_dlopen" in - dlopen) -for ac_hdr in dlfcn.h; do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "$progname:2269: checking for $ac_hdr" >&5 -if eval "test \"`echo 'X$''{'ac_cv_header_$ac_safe'+set}'`\" = Xset"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext < -int fnord = 0; -int main () { } -EOF -ac_try="$ac_compile >/dev/null 2>conftest.out" -{ (eval echo $progname:2280: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" -fi -rm -f conftest* -fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi -done - - if test "x$ac_cv_header_dlfcn_h" = xyes; then - CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - fi - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 -echo "$progname:2308: checking whether a program can dlopen itself" >&5 -if test "X${lt_cv_dlopen_self+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - lt_cv_dlopen_self=cross - else - cat > conftest.c < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LTDL_GLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LTDL_GLOBAL DL_GLOBAL -# else -# define LTDL_GLOBAL 0 -# endif -#endif - -/* We may have to define LTDL_LAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LTDL_LAZY_OR_NOW -# ifdef RTLD_LAZY -# define LTDL_LAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LTDL_LAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LTDL_LAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LTDL_LAZY_OR_NOW DL_NOW -# else -# define LTDL_LAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -fnord() { int i=42;} -main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); - if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); - if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } - -EOF -if { (eval echo $progname:2362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - lt_cv_dlopen_self=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - lt_cv_dlopen_self=no -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$lt_cv_dlopen_self" 1>&6 - - if test "$lt_cv_dlopen_self" = yes; then - LDFLAGS="$LDFLAGS $link_static_flag" - echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 -echo "$progname:2381: checking whether a statically linked program can dlopen itself" >&5 -if test "X${lt_cv_dlopen_self_static+set}" = Xset; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - lt_cv_dlopen_self_static=cross - else - cat > conftest.c < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LTDL_GLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LTDL_GLOBAL DL_GLOBAL -# else -# define LTDL_GLOBAL 0 -# endif -#endif - -/* We may have to define LTDL_LAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LTDL_LAZY_OR_NOW -# ifdef RTLD_LAZY -# define LTDL_LAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LTDL_LAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LTDL_LAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LTDL_LAZY_OR_NOW DL_NOW -# else -# define LTDL_LAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -fnord() { int i=42;} -main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); - if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); - if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } - -EOF -if { (eval echo $progname:2435: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null -then - lt_cv_dlopen_self_static=yes -else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - lt_cv_dlopen_self_static=no -fi -rm -fr conftest* -fi - -fi - -echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 -fi - ;; - 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 - -# Copy echo and quote the copy, instead of the original, because it is -# used later. -ltecho="$echo" -if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then - ltecho="$CONFIG_SHELL \$0 --fallback-echo" -fi -LTSHELL="$SHELL" - -LTCONFIG_VERSION="$VERSION" - -# Only quote variables if we're using ltmain.sh. -case "$ltmain" in -*.sh) - # Now quote all the things that may contain metacharacters. - for var in ltecho old_AR old_CC old_CFLAGS old_CPPFLAGS \ - old_MAGIC old_LD old_LDFLAGS old_LIBS \ - old_LN_S old_NM old_RANLIB old_STRIP \ - old_AS old_DLLTOOL old_OBJDUMP \ - old_OBJEXT old_EXEEXT old_reload_flag \ - old_deplibs_check_method old_file_magic_cmd \ - AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ - reload_flag reload_cmds wl \ - pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ - thread_safe_flag_spec whole_archive_flag_spec libname_spec \ - library_names_spec soname_spec \ - RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ - old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ - postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ - old_striplib striplib file_magic_cmd export_symbols_cmds \ - deplibs_check_method allow_undefined_flag no_undefined_flag \ - finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ - hardcode_libdir_flag_spec hardcode_libdir_separator \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do - - case "$var" in - reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ - extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ### testsuite: skip nested quoting test - ;; - *) - eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ### testsuite: skip nested quoting test - ;; - esac - done - - case "$ltecho" in - *'\$0 --fallback-echo"') - ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - - trap "$rm \"$ofile\"; exit 1" 1 2 15 - echo "creating $ofile" - $rm "$ofile" - cat < "$ofile" -#! $SHELL - -# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. -# -# Copyright (C) 1996-2000 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="sed -e s/^X//" - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi - -### BEGIN LIBTOOL CONFIG -EOF - cfgfile="$ofile" - ;; - -*) - # Double-quote the variables that need it (for aesthetics). - for var in old_AR old_CC old_CFLAGS old_CPPFLAGS \ - old_MAGIC old_LD old_LDFLAGS old_LIBS \ - old_LN_S old_NM old_RANLIB old_STRIP \ - old_AS old_DLLTOOL old_OBJDUMP \ - old_OBJEXT old_EXEEXT old_reload_flag \ - old_deplibs_check_method old_file_magic_cmd; do - eval "$var=\\\"\$var\\\"" - done - - # Just create a config file. - cfgfile="$ofile.cfg" - trap "$rm \"$cfgfile\"; exit 1" 1 2 15 - echo "creating $cfgfile" - $rm "$cfgfile" - cat < "$cfgfile" -# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. -# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) -EOF - ;; -esac - -cat <> "$cfgfile" -# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# AR=$old_AR CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ -# MAGIC=$old_MAGIC LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ -# LN_S=$old_LN_S NM=$old_NM RANLIB=$old_RANLIB STRIP=$old_STRIP \\ -# AS=$old_AS DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP \\ -# objext=$old_OBJEXT exeext=$old_EXEEXT reload_flag=$old_reload_flag \\ -# deplibs_check_method=$old_deplibs_check_method file_magic_cmd=$old_file_magic_cmd \\ -# $0$ltconfig_args -# -# Compiler and other test output produced by $progname, useful for -# debugging $progname, is in ./config.log if it exists. -# The version of $progname that generated this script. -LTCONFIG_VERSION=$LTCONFIG_VERSION - -# Shell to use when invoking shell scripts. -SHELL=$LTSHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host - -# An echo program that does not interpret backslashes. -echo=$ltecho - -# The archiver. -AR=$AR - -# The default C compiler. -CC=$CC - -# The linker used to build libraries. -LD=$LD - -# Whether we need hard or soft links. -LN_S=$LN_S - -# A BSD-compatible nm program. -NM=$NM - -# A symbol stripping program -STRIP=$STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC=$MAGIC - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$reload_flag -reload_cmds=$reload_cmds - -# How to pass a linker flag through the compiler. -wl=$wl - -# Object file suffix (normally "o"). -objext="$objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$pic_flag -pic_mode=$pic_mode - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$compiler_c_o - -# Can we write directly to a .lo ? -compiler_o_lo=$compiler_o_lo - -# Must we lock files when doing compilation ? -need_locks=$need_locks - -# 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 - -# 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 - -# Compiler flag to prevent dynamic linking. -link_static_flag=$link_static_flag - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$no_builtin_flag - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$whole_archive_flag_spec - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$thread_safe_flag_spec - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$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=$library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$RANLIB -old_archive_cmds=$old_archive_cmds -old_postinstall_cmds=$old_postinstall_cmds -old_postuninstall_cmds=$old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$old_archive_from_expsyms_cmds - -# Commands used to build and install a shared archive. -archive_cmds=$archive_cmds -archive_expsym_cmds=$archive_expsym_cmds -postinstall_cmds=$postinstall_cmds -postuninstall_cmds=$postuninstall_cmds - -# Commands to strip libraries. -old_striplib=$old_striplib -striplib=$striplib - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$allow_undefined_flag - -# Flag that forces no undefined symbols. -no_undefined_flag=$no_undefined_flag - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$global_symbol_to_cdecl - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$hardcode_libdir_separator - -# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct - -# 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 - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$export_symbols_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$include_expsyms - -EOF - -case "$ltmain" in -*.sh) - echo '### END LIBTOOL CONFIG' >> "$ofile" - echo >> "$ofile" - case "$host_os" in - aix3*) - cat <<\EOF >> "$ofile" - -# 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 "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -EOF - ;; - esac - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - cat <<'EOF' >> "$ofile" - # This is a source program that is used to create dlls on Windows - # Don't remove nor modify the starting and closing comments -# /* ltdll.c starts here */ -# #define WIN32_LEAN_AND_MEAN -# #include -# #undef WIN32_LEAN_AND_MEAN -# #include -# -# #ifndef __CYGWIN__ -# # ifdef __CYGWIN32__ -# # define __CYGWIN__ __CYGWIN32__ -# # endif -# #endif -# -# #ifdef __cplusplus -# extern "C" { -# #endif -# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); -# #ifdef __cplusplus -# } -# #endif -# -# #ifdef __CYGWIN__ -# #include -# DECLARE_CYGWIN_DLL( DllMain ); -# #endif -# HINSTANCE __hDllInstance_base; -# -# BOOL APIENTRY -# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) -# { -# __hDllInstance_base = hInst; -# return TRUE; -# } -# /* ltdll.c ends here */ - # This is a source program that is used to create import libraries - # on Windows for dlls which lack them. Don't remove nor modify the - # starting and closing comments -# /* impgen.c starts here */ -# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. -# -# This file is part of GNU libtool. -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# */ -# -# #include /* for printf() */ -# #include /* for open(), lseek(), read() */ -# #include /* for O_RDONLY, O_BINARY */ -# #include /* for strdup() */ -# -# /* O_BINARY isn't required (or even defined sometimes) under Unix */ -# #ifndef O_BINARY -# #define O_BINARY 0 -# #endif -# -# static unsigned int -# pe_get16 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[2]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 2); -# return b[0] + (b[1]<<8); -# } -# -# static unsigned int -# pe_get32 (fd, offset) -# int fd; -# int offset; -# { -# unsigned char b[4]; -# lseek (fd, offset, SEEK_SET); -# read (fd, b, 4); -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# static unsigned int -# pe_as32 (ptr) -# void *ptr; -# { -# unsigned char *b = ptr; -# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); -# } -# -# int -# main (argc, argv) -# int argc; -# char *argv[]; -# { -# int dll; -# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; -# unsigned long export_rva, export_size, nsections, secptr, expptr; -# unsigned long name_rvas, nexp; -# unsigned char *expdata, *erva; -# char *filename, *dll_name; -# -# filename = argv[1]; -# -# dll = open(filename, O_RDONLY|O_BINARY); -# if (!dll) -# return 1; -# -# dll_name = filename; -# -# for (i=0; filename[i]; i++) -# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') -# dll_name = filename + i +1; -# -# pe_header_offset = pe_get32 (dll, 0x3c); -# opthdr_ofs = pe_header_offset + 4 + 20; -# num_entries = pe_get32 (dll, opthdr_ofs + 92); -# -# if (num_entries < 1) /* no exports */ -# return 1; -# -# export_rva = pe_get32 (dll, opthdr_ofs + 96); -# export_size = pe_get32 (dll, opthdr_ofs + 100); -# nsections = pe_get16 (dll, pe_header_offset + 4 +2); -# secptr = (pe_header_offset + 4 + 20 + -# pe_get16 (dll, pe_header_offset + 4 + 16)); -# -# expptr = 0; -# for (i = 0; i < nsections; i++) -# { -# char sname[8]; -# unsigned long secptr1 = secptr + 40 * i; -# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); -# unsigned long vsize = pe_get32 (dll, secptr1 + 16); -# unsigned long fptr = pe_get32 (dll, secptr1 + 20); -# lseek(dll, secptr1, SEEK_SET); -# read(dll, sname, 8); -# if (vaddr <= export_rva && vaddr+vsize > export_rva) -# { -# expptr = fptr + (export_rva - vaddr); -# if (export_rva + export_size > vaddr + vsize) -# export_size = vsize - (export_rva - vaddr); -# break; -# } -# } -# -# expdata = (unsigned char*)malloc(export_size); -# lseek (dll, expptr, SEEK_SET); -# read (dll, expdata, export_size); -# erva = expdata - export_rva; -# -# nexp = pe_as32 (expdata+24); -# name_rvas = pe_as32 (expdata+32); -# -# printf ("EXPORTS\n"); -# for (i = 0; i> "$ofile" || (rm -f "$ofile"; exit 1) - # 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? - - chmod +x "$ofile" - ;; - -*) - # Compile the libtool program. - echo "FIXME: would compile $ltmain" - ;; -esac - -test -n "$cache_file" || exit 0 - -# AC_CACHE_SAVE -trap '' 1 2 15 -cat > confcache <<\EOF -# 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. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# 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. -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/rts/gmp/ltmain.sh b/rts/gmp/ltmain.sh deleted file mode 100644 index d81d89f..0000000 --- a/rts/gmp/ltmain.sh +++ /dev/null @@ -1,4692 +0,0 @@ -# ltmain.sh - Provide generalized library-building support services. -# NOTE: Changing this file will not affect anything until you rerun ltconfig. -# -# Copyright (C) 1996-2000 Free Software Foundation, Inc. -# Originally by Gordon Matzigkeit , 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 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# 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. - -# Check that we have a working $echo. -if test "X$1" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift -elif test "X$1" = X--fallback-echo; then - # Avoid inline document here, it may be left over - : -elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then - # Yippee, $echo works! - : -else - # Restart under the correct shell, and then maybe $echo will work. - exec $SHELL "$0" --no-reexec ${1+"$@"} -fi - -if test "X$1" = X--fallback-echo; then - # used as fallback echo - shift - cat <&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - echo "$modename: not configured to build any kind of library" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 -fi - -# Global variables. -mode=$default_mode -nonopt= -prev= -prevopt= -run= -show="$echo" -show_help= -execute_dlfiles= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" - -# Parse our command line options once, thoroughly. -while test $# -gt 0 -do - arg="$1" - shift - - case "$arg" in - -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; - *) optarg= ;; - esac - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - execute_dlfiles) - eval "$prev=\"\$$prev \$arg\"" - ;; - *) - eval "$prev=\$arg" - ;; - esac - - prev= - prevopt= - continue - fi - - # Have we seen a non-optional argument yet? - case "$arg" in - --help) - show_help=yes - ;; - - --version) - echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" - exit 0 - ;; - - --config) - sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 - exit 0 - ;; - - --debug) - echo "$progname: enabling shell trace mode" - set -x - ;; - - --dry-run | -n) - run=: - ;; - - --features) - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - exit 0 - ;; - - --finish) mode="finish" ;; - - --mode) prevopt="--mode" prev=mode ;; - --mode=*) mode="$optarg" ;; - - --quiet | --silent) - show=: - ;; - - -dlopen) - prevopt="-dlopen" - prev=execute_dlfiles - ;; - - -*) - $echo "$modename: unrecognized option \`$arg'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - - *) - nonopt="$arg" - break - ;; - esac -done - -if test -n "$prevopt"; then - $echo "$modename: option \`$prevopt' requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 -fi - -if test -z "$show_help"; then - - # Infer the operation mode. - if test -z "$mode"; then - case "$nonopt" in - *cc | *++ | gcc* | *-gcc*) - mode=link - for arg - do - case "$arg" in - -c) - mode=compile - break - ;; - esac - done - ;; - *db | *dbx | *strace | *truss) - mode=execute - ;; - *install*|cp|mv) - mode=install - ;; - *rm) - mode=uninstall - ;; - *) - # If we have no mode, but dlfiles were specified, then do execute mode. - test -n "$execute_dlfiles" && mode=execute - - # Just use the default operation mode. - if test -z "$mode"; then - if test -n "$nonopt"; then - $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 - else - $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 - fi - fi - ;; - esac - fi - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - $echo "$modename: unrecognized option \`-dlopen'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$modename --help --mode=$mode' for more information." - - # These modes are in order of execution frequency so that they run quickly. - case "$mode" in - # libtool compile mode - compile) - modename="$modename: compile" - # Get the compilation command and the source file. - base_compile= - prev= - lastarg= - srcfile="$nonopt" - suppress_output= - - user_target=no - for arg - do - case "$prev" in - "") ;; - xcompiler) - # Aesthetically quote the previous argument. - prev= - lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - - case "$arg" in - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - continue - ;; - esac - - # Accept any command-line options. - case "$arg" in - -o) - if test "$user_target" != "no"; then - $echo "$modename: you cannot specify \`-o' more than once" 1>&2 - exit 1 - fi - user_target=next - ;; - - -static) - build_old_libs=yes - continue - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` - lastarg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - lastarg="$lastarg $arg" - done - IFS="$save_ifs" - lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` - - # Add the arguments to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - continue - ;; - esac - - case "$user_target" in - next) - # The next one is the -o target name - user_target=yes - continue - ;; - yes) - # We got the output file - user_target=set - libobj="$arg" - continue - ;; - esac - - # Accept the current argument as the source file. - lastarg="$srcfile" - srcfile="$arg" - - # Aesthetically quote the previous argument. - - # Backslashify any backslashes, double quotes, and dollar signs. - # These are the only characters that are still specially - # interpreted inside of double-quoted scrings. - lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` - - # Double-quote args containing other shell metacharacters. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - case "$lastarg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - lastarg="\"$lastarg\"" - ;; - esac - - # Add the previous argument to base_compile. - if test -z "$base_compile"; then - base_compile="$lastarg" - else - base_compile="$base_compile $lastarg" - fi - done - - case "$user_target" in - set) - ;; - no) - # Get the name of the library object. - libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` - ;; - *) - $echo "$modename: you must specify a target with \`-o'" 1>&2 - exit 1 - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - xform='[cCFSfmso]' - case "$libobj" in - *.ada) xform=ada ;; - *.adb) xform=adb ;; - *.ads) xform=ads ;; - *.asm) xform=asm ;; - *.c++) xform=c++ ;; - *.cc) xform=cc ;; - *.cpp) xform=cpp ;; - *.cxx) xform=cxx ;; - *.f90) xform=f90 ;; - *.for) xform=for ;; - esac - - libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` - - case "$libobj" in - *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; - *) - $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 - exit 1 - ;; - esac - - if test -z "$base_compile"; then - $echo "$modename: you must specify a compilation command" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $libobj" - else - removelist="$libobj" - fi - - $run $rm $removelist - trap "$run $rm $removelist; exit 1" 1 2 15 - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} - lockfile="$output_obj.lock" - removelist="$removelist $output_obj $lockfile" - trap "$run $rm $removelist; exit 1" 1 2 15 - else - 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 "$need_locks" = yes; then - until ln "$0" "$lockfile" 2>/dev/null; do - $show "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; 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." - - $run $rm $removelist - exit 1 - fi - echo $srcfile > "$lockfile" - fi - - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $srcfile $pic_flag -DPIC" - else - # Don't build PIC code - command="$base_compile $srcfile" - fi - if test "$build_old_libs" = yes; then - lo_libobj="$libobj" - dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$libobj"; then - dir="$objdir" - else - dir="$dir/$objdir" - fi - libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - - if test -d "$dir"; then - $show "$rm $libobj" - $run $rm $libobj - else - $show "$mkdir $dir" - $run $mkdir $dir - status=$? - if test $status -ne 0 && test ! -d $dir; then - exit $status - fi - fi - fi - if test "$compiler_o_lo" = yes; then - output_obj="$libobj" - command="$command -o $output_obj" - elif test "$compiler_c_o" = yes; then - output_obj="$obj" - command="$command -o $output_obj" - fi - - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - test -n "$output_obj" && $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - 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." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed, then go on to compile the next one - if test x"$output_obj" != x"$libobj"; then - $show "$mv $output_obj $libobj" - if $run $mv $output_obj $libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # If we have no pic_flag, then copy the object into place and finish. - if (test -z "$pic_flag" || test "$pic_mode" != default) && - test "$build_old_libs" = yes; then - # Rename the .lo from within objdir to obj - if test -f $obj; then - $show $rm $obj - $run $rm $obj - fi - - $show "$mv $libobj $obj" - if $run $mv $libobj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` - libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - # Now arrange that obj and lo_libobj become the same file - $show "(cd $xdir && $LN_S $baseobj $libobj)" - if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then - exit 0 - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Allow error messages only from the first compilation. - suppress_output=' >/dev/null 2>&1' - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $srcfile" - else - # All platforms use -DPIC, to notify preprocessed assembler code. - command="$base_compile $srcfile $pic_flag -DPIC" - fi - if test "$compiler_c_o" = yes; then - command="$command -o $obj" - output_obj="$obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" - $run $rm "$output_obj" - $show "$command" - if $run eval "$command"; then : - else - $run $rm $removelist - exit 1 - fi - - if test "$need_locks" = warn && - 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." - - $run $rm $removelist - exit 1 - fi - - # Just move the object if needed - if test x"$output_obj" != x"$obj"; then - $show "$mv $output_obj $obj" - if $run $mv $output_obj $obj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - - # Create an invalid libtool object if no PIC, so that we do not - # accidentally link it into a program. - if test "$build_libtool_libs" != yes; then - $show "echo timestamp > $libobj" - $run eval "echo timestamp > \$libobj" || exit $? - else - # Move the .lo from within objdir - $show "$mv $libobj $lo_libobj" - if $run $mv $libobj $lo_libobj; then : - else - error=$? - $run $rm $removelist - exit $error - fi - fi - fi - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - $rm "$lockfile" - fi - - exit 0 - ;; - - # libtool link mode - link | relink) - modename="$modename: link" - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invokation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which 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" - 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` - - avoid_version=no - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - - # We need to know -static, to get the right output filenames. - for arg - do - case "$arg" in - -all-static | -static) - if test "X$arg" = "X-all-static"; then - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - else - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - fi - build_libtool_libs=no - build_old_libs=yes - prefer_static_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 - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test - ;; - *) qarg=$arg ;; - esac - libtool_args="$libtool_args $qarg" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case "$prev" in - output) - compile_command="$compile_command @OUTPUT@" - finalize_command="$finalize_command @OUTPUT@" - ;; - esac - - case "$prev" in - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - compile_command="$compile_command @SYMFILE@" - finalize_command="$finalize_command @SYMFILE@" - preload=yes - fi - case "$arg" in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - dlfiles="$dlfiles $arg" - else - dlprefiles="$dlprefiles $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - if test ! -f "$arg"; then - $echo "$modename: symbol file \`$arg' does not exist" - exit 1 - fi - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case "$arg" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) rpath="$rpath $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) xrpath="$xrpath $arg" ;; - esac - fi - prev= - continue - ;; - xcompiler) - compiler_flags="$compiler_flags $qarg" - prev= - compile_command="$compile_command $qarg" - finalize_command="$finalize_command $qarg" - continue - ;; - xlinker) - linker_flags="$linker_flags $qarg" - compiler_flags="$compiler_flags $wl$qarg" - prev= - compile_command="$compile_command $wl$qarg" - finalize_command="$finalize_command $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi - - prevarg="$arg" - - case "$arg" in - -all-static) - if test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 - continue - ;; - - -avoid-version) - avoid_version=yes - 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 - $echo "$modename: not more than one -exported-symbols argument allowed" - exit 1 - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -L*) - dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` - # We need an absolute path. - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 - exit 1 - fi - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "*) ;; - *) - deplibs="$deplibs -L$dir" - lib_search_path="$lib_search_path $dir" - ;; - esac - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - case ":$dllsearchpath:" in - *":$dir:"*) ;; - *) dllsearchpath="$dllsearchpath:$dir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "$arg" = "-lc"; then - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # These systems don't actually have c library (as such) - continue - ;; - esac - elif test "$arg" = "-lm"; then - case "$host" in - *-*-cygwin* | *-*-beos*) - # These systems don't actually have math library (as such) - continue - ;; - esac - fi - deplibs="$deplibs $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - # The PATH hackery in wrapper scripts is required on Windows - # in order for the loader to find any dlls it needs. - $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 - $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 - fast_install=no - ;; - *) - no_install=yes - ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -o) prev=output ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` - # We need an absolute path. - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - $echo "$modename: only absolute run-paths are allowed" 1>&2 - exit 1 - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - continue - ;; - - -static) - # If we have no pic_flag, then this is the same as -all-static. - if test -z "$pic_flag" && test -n "$link_static_flag"; then - compile_command="$compile_command $link_static_flag" - finalize_command="$finalize_command $link_static_flag" - fi - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -Wc,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` - arg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case "$flag" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Wl,*) - args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` - arg= - IFS="${IFS= }"; save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - case "$flag" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - flag="\"$flag\"" - ;; - esac - arg="$arg $wl$flag" - compiler_flags="$compiler_flags $wl$flag" - linker_flags="$linker_flags $flag" - done - IFS="$save_ifs" - arg=`$echo "X$arg" | $Xsed -e "s/^ //"` - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - # Some other compiler flag. - -* | +*) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - - *.$objext) - # A standard object. - objs="$objs $arg" - ;; - - *.lo) - # A library object. - if test "$prev" = dlfiles; then - # This file was specified with -dlopen. - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - dlfiles="$dlfiles $arg" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - if test "$prev" = dlprefiles; then - # Preload the old-style object. - dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` - prev= - else - libobjs="$libobjs $arg" - fi - ;; - - *.$libext) - # An archive. - deplibs="$deplibs $arg" - old_deplibs="$old_deplibs $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - dlfiles="$dlfiles $arg" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - dlprefiles="$dlprefiles $arg" - prev= - else - deplibs="$deplibs $arg" - 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. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - arg="\"$arg\"" - ;; - esac - ;; - esac - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - done - - if test -n "$prev"; then - $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - compile_command="$compile_command $arg" - finalize_command="$finalize_command $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'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\" - lib_search_path="$lib_search_path $sys_lib_search_path $shlib_search_path" - - output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` - if test "X$output_objdir" = "X$output"; then - output_objdir="$objdir" - else - output_objdir="$output_objdir/$objdir" - fi - # Create the object directory. - if test ! -d $output_objdir; then - $show "$mkdir $output_objdir" - $run $mkdir $output_objdir - status=$? - if test $status -ne 0 && test ! -d $output_objdir; then - exit $status - fi - fi - - case "$output" in - "") - $echo "$modename: you must specify an output file" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - *.$libext) - linkmode=oldlib ;; - *.lo | *.$objext) - linkmode=obj ;; - *.la) - linkmode=lib ;; - *) # Anything else should be a program. - linkmode=prog ;; - esac - - specialdeplibs= - libs= - # Find all interdependent deplibs that - # are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - case "$libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - libs="$libs $deplib" - done - deplibs= - newdependency_libs= - uninst_path= # paths that contain uninstalled libtool libraries - new_lib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - case $linkmode in - lib) - passes="link" - for file in $dlfiles $dlprefiles; do - case "$file" in - *.la) ;; - *) - $echo "$modename: libraries can \`-dlopen' only libtool libraries" 1>&2 - exit 1 - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - link_against_libtool_libs= - passes="scan dlopen dlpreopen link" - ;; - *) passes="link" - ;; - esac - for pass in $passes; do - if test $linkmode = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test $pass = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - for deplib in $libs; do - lib= - found=no - case "$deplib" in - -l*) - if test $linkmode != lib && test $linkmode != prog; then - $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 - continue - fi - name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` - for searchdir in $lib_search_path; do - # Search the libtool library - lib="$searchdir/lib${name}.la" - if test -f "$lib"; then - found=yes - break - fi - done - if test "$found" != yes; then - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - newdependency_libs="$deplib $newdependency_libs" - new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - ;; - prog) - if test $pass = scan; then - deplibs="$deplib $deplibs" - new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - ;; - *) - $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 - ;; - esac - continue - ;; - -R*) - if test "$linkmode,$pass" = "prog,link"; then - dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) xrpath="$xrpath $dir" ;; - esac - fi - continue - ;; - *.la) lib="$deplib" ;; - *.$libext) - case $linkmode in - lib) - if test "$deplibs_check_method" != pass_all; then - echo - echo "*** Warning: This library needs some functionality provided by $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." - else - echo - echo "*** Warning: Linking the shared library $output against the" - echo "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - continue - ;; - prog) - if test $pass != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac - ;; - *.lo | *.$objext) - if test $linkmode = prog; then - if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - newdlprefiles="$newdlprefiles $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - newdlfiles="$newdlfiles $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac - if test $found = yes || test -f "$lib"; then : - else - $echo "$modename: cannot find the library \`$lib'" 1>&2 - exit 1 - fi - - # Check to see that this really is a libtool archive. - if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - - ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` - test "X$ladir" = "X$lib" && ladir="." - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - # If the library was installed with an old release of libtool, - # it will not redefine variable installed. - installed=yes - - # Read the .la file - case "$lib" in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - - if test $linkmode = lib || test "$linkmode,$pass" = "prog,scan"; then - test -n "$dlopen" && dlfiles="$dlfiles $dlopen" - test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" - fi - - if test $linkmode != lib && test $linkmode != prog; then - # only check for convenience libraries - if test -z "$old_library"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit 1 - fi - if test -n "$libdir"; then - $echo "$modename: \`$lib' is not a convenience library" 1>&2 - exit 1 - fi - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $ladir/$objdir/$old_library" - old_convenience="$old_convenience $ladir/$objdir/$old_library" - continue - fi - - # Get the name of the library we link against. - linklib= - for l in $old_library $library_names; do - linklib="$l" - done - if test -z "$linklib"; then - $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 - exit 1 - fi - - # This library was specified with -dlopen. - if test $pass = dlopen; then - if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking statically, - # we need to preload. - dlprefiles="$dlprefiles $lib" - else - newdlfiles="$newdlfiles $lib" - fi - continue - fi - - # 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 - $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 - $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 - abs_ladir="$ladir" - fi - ;; - esac - laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - $echo "$modename: warning: library \`$lib' was moved." 1>&2 - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$libdir" - absdir="$libdir" - fi - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - uninst_path="$uninst_path $abs_ladir" - fi - name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - - # This library was specified with -dlpreopen. - if test $pass = dlpreopen; then - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - newdlprefiles="$newdlprefiles $dir/$old_library" - else - newdlprefiles="$newdlprefiles $dir/$linklib" - fi - fi - - if test $linkmode = prog && test $pass != link; then - new_lib_search_path="$new_lib_search_path $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test "$fast_install" != no || \ - test "$build_libtool_libs" = no || test -z "$library_names"; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case "$deplib" in - -L*) new_lib_search_path="$new_lib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test - esac - # Need to link against all dependency_libs? - if test $linkalldeplibs = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - continue - fi - - if test -z "$libdir"; then - # It is a libtool convenience library, so add in its objects. - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - if test $linkmode = lib; then - deplibs="$dir/$old_library $deplibs" - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - fi - continue - fi - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { test "$hardcode_into_libs" != all || test "$alldeplibs" != yes; } && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var"; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath " in - *" $dir "*) ;; - *" $absdir "*) ;; - *) temp_rpath="$temp_rpath $dir" ;; - 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 "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # Do we only need to link against static libraries? - continue - fi - fi - - link_static=no # Whether this library is linked statically - if test -n "$library_names" && - { test "$prefer_static_libs" = no || test -z "$old_library"; }; then - link_against_libtool_libs="$link_against_libtool_libs $lib" - test "X$installed" = xno && need_relink=yes - # This is a shared library - if test $linkmode = lib && test "$hardcode_into_libs" = all; 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 "*) ;; - *) compile_rpath="$compile_rpath $absdir" - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - realname="$2" - shift; shift - libname=`eval \\$echo \"$libname_spec\"` - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - $show "extracting exported symbol list from \`$soname'" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - eval cmds=\"$extract_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - $show "generating import library for \`$soname'" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - eval cmds=\"$old_archive_from_expsyms_cmds\" - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi - - if test $linkmode = prog || test "$mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case "$hardcode_action" in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = no; then - case "$host" in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - $echo "$modename: configuration error: unsupported hardcode properties" - exit 1 - fi - - if test -n "$add_shlibpath"; then - case ":$compile_shlibpath:" in - *":$add_shlibpath:"*) ;; - *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; - esac - fi - if test $linkmode = prog; 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 "$hardcode_direct" != yes && \ - test "$hardcode_minus_L" != yes && \ - test "$hardcode_shlibpath_var" = yes; then - case ":$finalize_shlibpath:" in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - fi - fi - fi - - if test $linkmode = prog || test "$mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case ":$finalize_shlibpath:" in - *":$libdir:"*) ;; - *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; - esac - add="-l$name" - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - add="-l$name" - fi - - if test $linkmode = prog; 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 $linkmode = prog; 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 "$hardcode_direct" != unsupported; 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 "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; 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 library needs some functionality provided by $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." - else - convenience="$convenience $dir/$old_library" - old_convenience="$old_convenience $dir/$old_library" - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi - - if test $linkmode = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" = no || test $build_old_libs = yes || - test $link_static = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case "$libdir" in - -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) xrpath="$xrpath $temp_xrpath";; - esac;; - *) temp_deplibs="$temp_deplibs $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - new_lib_search_path="$new_lib_search_path $absdir" - # Link against this library - test "$link_static" = no && 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 "$tmp_libs " in - *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; - esac - tmp_libs="$tmp_libs $deplib" - done - - if test $link_all_deplibs != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - case "$deplib" in - -L*) path="$deplib" ;; - *.la) - dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$deplib" && dir="." - # We need an absolute path. - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 - absdir="$dir" - fi - ;; - esac - if grep "^installed=no" $deplib > /dev/null; then - path="-L$absdir/$objdir" - else - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - if test "$absdir" != "$libdir"; then - $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 - fi - path="-L$absdir" - fi - ;; - *) continue ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$deplibs $path" ;; - esac - done - fi - fi - done - dependency_libs="$newdependency_libs" - if test $pass = dlpreopen; then - # Link the dlpreopened libraries before other libraries - deplibs="$deplibs $save_deplibs" - elif test $pass != dlopen; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $new_lib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) lib_search_path="$lib_search_path $dir" ;; - esac - done - lib_search_path="$lib_search_path $sys_lib_search_path" - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Make sure that $var contains only unique libraries - # and add them in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - case "$deplib" in - -L*) new_libs="$deplib $new_libs" ;; - *) - 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 "*) ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - ;; - *) tmp_libs="$tmp_libs $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done - fi - done - if test $linkmode = prog; then - dlfiles="$newdlfiles" - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 - fi - - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 - fi - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - objs="$objs$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case "$outputname" in - lib*) - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` - eval libname=\"$libname_spec\" - ;; - *) - if test "$module" = no; then - $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - eval libname=\"$libname_spec\" - else - libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 - exit 1 - else - echo - echo "*** Warning: Linking the shared library $output against the non-libtool" - echo "*** objects $objs is not portable!" - libobjs="$libobjs $objs" - fi - fi - - if test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 - fi - - set dummy $rpath - if test $# -gt 2; then - $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 - fi - install_libdir="$2" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - libext=al - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 - fi - else - - # Parse the version information argument. - IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - IFS="$save_ifs" - - if test -n "$8"; then - $echo "$modename: too many parameters to \`-version-info'" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - current="$2" - revision="$3" - age="$4" - - # Check that each of the things are valid numbers. - case "$current" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$revision" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - case "$age" in - 0 | [1-9] | [1-9][0-9]*) ;; - *) - $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - ;; - esac - - if test $age -gt $current; then - $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 - $echo "$modename: \`$vinfo' is not valid version information" 1>&2 - exit 1 - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case "$version_type" in - none) ;; - - irix) - major=`expr $current - $age + 1` - versuffix="$major.$revision" - verstring="sgi$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test $loop != 0; do - iface=`expr $revision - $loop` - loop=`expr $loop - 1` - verstring="sgi$major.$iface:$verstring" - done - ;; - - linux) - major=.`expr $current - $age` - versuffix="$major.$age.$revision" - ;; - - osf) - major=`expr $current - $age` - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test $loop != 0; do - iface=`expr $current - $loop` - loop=`expr $loop - 1` - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - verstring="$verstring:${current}.0" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current"; - ;; - - windows) - # Like Linux, but with '-' rather than '.', since we only - # want one extension on Windows 95. - major=`expr $current - $age` - versuffix="-$major-$age-$revision" - ;; - - *) - $echo "$modename: unknown library version type \`$version_type'" 1>&2 - echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 - exit 1 - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - verstring="0.0" - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - fi - - if test "$mode" != relink; then - # Remove our outputs. - $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" - $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - oldlibs="$oldlibs $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - for path in $uninst_path; do - lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` - deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` - dependency_libs=`echo "$dependency_libs " | sed -e '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 - temp_xrpath="$temp_xrpath -R$libdir" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; - esac - done - if test "$hardcode_into_libs" = no || test $build_old_libs = yes; 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 "*) ;; - *) dlfiles="$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 "*) ;; - *) dlprefiles="$dlprefiles $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) - # these systems don't actually have a c library (as such)! - ;; - *) - # Add libc to deplibs on all other systems. - deplibs="$deplibs -lc" - ;; - 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 behaviour. - 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. - $rm conftest.c - cat > conftest.c </dev/null` - 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ - | sed 10q \ - | egrep "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" - a_deplib="" - break 2 - fi - done - done - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - echo "*** Warning: This library needs some functionality provided by $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." - fi - else - # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" - fi - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ - -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | - grep . >/dev/null; then - echo - if test "X$deplibs_check_method" = "Xnone"; 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 - fi - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - if test "$droppeddeps" = yes; then - if test "$module" = yes; 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 "$build_old_libs" = no; 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." - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - - # 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 "$build_libtool_libs" = yes; then - if test "$hardcode_into_libs" != no; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $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"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$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 - rpath="$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 "$mode" != relink && 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 library_names=\"$library_names_spec\" - set dummy $library_names - realname="$2" - shift; shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - lib="$output_objdir/$realname" - for link - do - linknames="$linknames $link" - done - - # Ensure that we have .o objects for linkers which dislike .lo - # (e.g. aix) in case we are running --disable-static - for obj in $libobjs; do - xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$obj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - if test ! -f $xdir/$oldobj; then - $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" - $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? - fi - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - $show "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $run $rm $export_symbols - eval cmds=\"$export_symbols_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - if test -n "$export_symbols_regex"; then - $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" - $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - $show "$mv \"${export_symbols}T\" \"$export_symbols\"" - $run eval '$mv "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' - fi - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$mode" = relink && test "$hardcode_into_libs" = all; then - $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval cmds=\"$archive_expsym_cmds\" - else - eval cmds=\"$archive_cmds\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$mode" = relink && test "$hardcode_into_libs" = all; then - $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? - exit 0 - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" - $run 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 "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$deplibs"; then - $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 - fi - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 - fi - - if test -n "$rpath"; then - $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 - fi - - if test -n "$xrpath"; then - $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 - fi - - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 - fi - - case "$output" in - *.lo) - if test -n "$objs$old_deplibs"; then - $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 - exit 1 - fi - libobj="$output" - obj=`$echo "X$output" | $Xsed -e "$lo2o"` - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $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= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" - else - gentop="$output_objdir/${obj}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - for xlib in $convenience; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` - done - fi - fi - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${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" - $run eval "echo timestamp > $libobj" || exit $? - exit 0 - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - eval cmds=\"$reload_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - else - # Just create a symlink. - $show $rm $libobj - $run $rm $libobj - xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$libobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` - oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` - $show "(cd $xdir && $LN_S $oldobj $baseobj)" - $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? - fi - - if test -n "$gentop"; then - $show "${rm}r $gentop" - $run ${rm}r $gentop - fi - - exit 0 - ;; - - prog) - if test -n "$vinfo"; then - $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 - fi - - if test -n "$release"; then - $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 - fi - - if test "$preload" = yes; then - if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && - test "$dlopen_self_static" = unknown; then - $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." - fi - fi - - compile_command="$compile_command $compile_deplibs" - finalize_command="$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 "*) ;; - *) finalize_rpath="$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"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; - esac - fi - case "$host" in - *-*-cygwin* | *-*-mingw* | *-*-os2*) - case ":$dllsearchpath:" in - *":$libdir:"*) ;; - *) dllsearchpath="$dllsearchpath:$libdir";; - 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"*) - ;; - *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) finalize_perm_rpath="$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 "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - fi - - dlsyms= - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - dlsyms="${outputname}S.c" - else - $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 - fi - fi - - if test -n "$dlsyms"; then - case "$dlsyms" in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${outputname}.nm" - - $show "$rm $nlist ${nlist}S ${nlist}T" - $run $rm "$nlist" "${nlist}S" "${nlist}T" - - # Parse the name list into a source file. - $show "creating $output_objdir/$dlsyms" - - test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ -/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ -/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -/* Prevent the only kind of declaration conflicts we can make. */ -#define lt_preloaded_symbols some_other_symbol - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - $show "generating symbol list for \`$output'" - - test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` - for arg in $progfiles; do - $show "extracting global C symbols from \`$arg'" - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - if test -n "$export_symbols_regex"; then - $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' - $run eval '$mv "$nlist"T "$nlist"' - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$output.exp" - $run $rm $export_symbols - $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - else - $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' - $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' - $run eval 'mv "$nlist"T "$nlist"' - fi - fi - - for arg in $dlprefiles; do - $show "extracting global C symbols from \`$arg'" - name=`echo "$arg" | sed -e 's%^.*/%%'` - $run eval 'echo ": $name " >> "$nlist"' - $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" - done - - if test -z "$run"; then - # 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" | sort +2 | 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/$dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$dlsyms" - fi - - $echo >> "$output_objdir/$dlsyms" "\ - -#undef lt_preloaded_symbols - -#if defined (__STDC__) && __STDC__ -# define lt_ptr_t void * -#else -# define lt_ptr_t char * -# define const -#endif - -/* The mapping between symbol names and symbols. */ -const struct { - const char *name; - lt_ptr_t address; -} -lt_preloaded_symbols[] = -{\ -" - - sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ - -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ - < "$nlist" >> "$output_objdir/$dlsyms" - - $echo >> "$output_objdir/$dlsyms" "\ - {0, (lt_ptr_t) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - fi - - pic_flag_for_symtable= - 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*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; - esac;; - *-*-hpux*) - case "$compile_command " in - *" -static "*) ;; - *) pic_flag_for_symtable=" $pic_flag -DPIC";; - esac - esac - - # Now compile the dynamic symbol file. - $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" - $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? - - # Clean up the generated files. - $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" - $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" - - # Transform the symbol file into the correct name. - compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` - ;; - *) - $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 - exit 1 - ;; - 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` - finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` - fi - - if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then - # Replace the output file specification. - compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - $show "$link_command" - $run eval "$link_command" - status=$? - - # Delete the generated files. - if test -n "$dlsyms"; then - $show "$rm $output_objdir/${outputname}S.${objext}" - $run $rm "$output_objdir/${outputname}S.${objext}" - fi - - exit $status - fi - - if test -n "$shlibpath_var"; then - # We should set the shlibpath_var - rpath= - for dir in $temp_rpath; do - case "$dir" in - [\\/]* | [A-Za-z]:[\\/]*) - # Absolute path. - rpath="$rpath$dir:" - ;; - *) - # Relative path: add a thisdir entry. - rpath="$rpath\$thisdir/$dir:" - ;; - esac - done - temp_rpath="$rpath" - fi - - 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 - rpath="$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 - rpath="$rpath$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; 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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $run $rm $output - # Link the executable and exit - $show "$link_command" - $run eval "$link_command" || exit $? - exit 0 - fi - - if test "$hardcode_action" = relink || test "$hardcode_into_libs" = all; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 - $echo "$modename: \`$output' will be relinked during installation" 1>&2 - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname - - $show "$link_command" - $run eval "$link_command" || exit $? - - # Now create the wrapper script. - $show "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - relink_command="cd `pwd`; $relink_command" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - fi - - # Quote $echo for shipping. - if test "X$echo" = "X$SHELL $0 --fallback-echo"; then - case "$0" in - [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; - *) qecho="$SHELL `pwd`/$0 --fallback-echo";; - esac - qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` - else - qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` - fi - - # Only actually do things if our run command is non-null. - if test -z "$run"; then - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) output=`echo $output|sed 's,.exe$,,'` ;; - esac - $rm $output - trap "$rm $output; exit 1" 1 2 15 - - $echo > $output "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# 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. -Xsed='sed -e 1s/^X//' -sed_quote_subst='$sed_quote_subst' - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variable: - link_against_libtool_libs='$link_against_libtool_libs' -else - # When we are sourced in execute mode, \$file and \$echo are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - echo=\"$qecho\" - file=\"\$0\" - # Make sure echo works. - if test \"X\$1\" = X--no-reexec; then - # Discard the --no-reexec flag, and continue. - shift - elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then - # Yippee, \$echo works! - : - else - # Restart under the correct shell, and then maybe \$echo will work. - exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} - fi - fi\ -" - $echo >> $output "\ - - # Find the directory that this script lives in. - thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` - done - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - echo >> $output "\ - program=lt-'$outputname' - 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 >> $output "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if (eval \$relink_command); then : - else - $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 >> $output "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - echo >> $output "\ - - if test -f \"\$progdir/\$program\"; then" - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $echo >> $output "\ - # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` - - export $shlibpath_var -" - fi - - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $echo >> $output "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - $echo >> $output "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. -" - case $host in - *-*-cygwin* | *-*-mingw | *-*-os2*) - # win32 systems need to use the prog path for dll - # lookup to work - $echo >> $output "\ - exec \$progdir\\\\\$program \${1+\"\$@\"} -" - ;; - *) - $echo >> $output "\ - # Export the path to the program. - PATH=\"\$progdir:\$PATH\" - export PATH - - exec \$program \${1+\"\$@\"} -" - ;; - esac - $echo >> $output "\ - \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" - exit 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\ -" - chmod +x $output - fi - exit 0 - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - $show "${rm}r $gentop" - $run ${rm}r "$gentop" - $show "mkdir $gentop" - $run mkdir "$gentop" - status=$? - if test $status -ne 0 && test ! -d "$gentop"; then - exit $status - fi - generated="$generated $gentop" - - # Add in members from convenience archives. - for xlib in $addlibs; do - # Extract the objects. - case "$xlib" in - [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; - *) xabs=`pwd`"/$xlib" ;; - esac - xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` - xdir="$gentop/$xlib" - - $show "${rm}r $xdir" - $run ${rm}r "$xdir" - $show "mkdir $xdir" - $run mkdir "$xdir" - status=$? - if test $status -ne 0 && test ! -d "$xdir"; then - exit $status - fi - $show "(cd $xdir && $AR x $xabs)" - $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? - - oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` - done - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - eval cmds=\"$old_archive_from_new_cmds\" - else - # Ensure that we have .o objects in place in case we decided - # not to build a shared library, and have fallen back to building - # static libs even though --disable-static was passed! - for oldobj in $oldobjs; do - if test ! -f $oldobj; then - xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` - if test "X$xdir" = "X$oldobj"; then - xdir="." - else - xdir="$xdir" - fi - baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` - obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` - $show "(cd $xdir && ${LN_S} $obj $baseobj)" - $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? - fi - done - - eval cmds=\"$old_archive_cmds\" - fi - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$generated"; then - $show "${rm}r$generated" - $run ${rm}r$generated - fi - - # Now create the libtool archive. - case "$output" in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - $show "creating $output" - - # Quote the link command for shipping. - relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" - relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` - - # Only create the output if not a dry run. - if test -z "$run"; then - for installed in no yes; do - if test "$installed" = yes; 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) - name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - if test -z "$libdir"; then - $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdependency_libs="$newdependency_libs $libdir/$name" - ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - for lib in $dlfiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlfiles="$newdlfiles $libdir/$name" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` - eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - if test -z "$libdir"; then - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - exit 1 - fi - newdlprefiles="$newdlprefiles $libdir/$name" - done - dlprefiles="$newdlprefiles" - fi - $rm $output - $echo > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$dlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no; then - $echo >> $output "\ -relink_command=\"$relink_command\"" - fi - done - fi - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" - $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? - ;; - esac - exit 0 - ;; - - # libtool install mode - install) - modename="$modename: install" - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then - # Aesthetically quote it. - arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$arg " - arg="$1" - shift - else - install_prog= - arg="$nonopt" - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog$arg" - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - for arg - do - if test -n "$dest"; then - files="$files $dest" - dest="$arg" - continue - fi - - case "$arg" in - -d) isdir=yes ;; - -f) prev="-f" ;; - -g) prev="-g" ;; - -m) prev="-m" ;; - -o) prev="-o" ;; - -s) - stripme=" -s" - continue - ;; - -*) ;; - - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - prev= - else - dest="$arg" - continue - fi - ;; - esac - - # Aesthetically quote the argument. - arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` - case "$arg" in - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) - arg="\"$arg\"" - ;; - esac - install_prog="$install_prog $arg" - done - - if test -z "$install_prog"; then - $echo "$modename: you must specify an install program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -n "$prev"; then - $echo "$modename: the \`$prev' option requires an argument" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - if test -z "$files"; then - if test -z "$dest"; then - $echo "$modename: no file or destination specified" 1>&2 - else - $echo "$modename: you must specify a destination" 1>&2 - fi - $echo "$help" 1>&2 - exit 1 - fi - - # Strip any trailing slash from the destination. - dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` - test "X$destdir" = "X$dest" && destdir=. - destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` - - # Not a directory, so check to see that there is only one file specified. - set dummy $files - if test $# -gt 2; then - $echo "$modename: \`$dest' is not a directory" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - fi - case "$destdir" in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case "$file" in - *.lo) ;; - *) - $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - 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. - staticlibs="$staticlibs $file" - ;; - - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - library_names= - old_library= - relink_command= - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; - esac - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ - test "X$dir" = "X$file/" && dir= - dir="$dir$objdir" - - if test "$hardcode_into_libs" = all; then - if test -z "$relink_command"; then - $echo "$modename: invalid libtool pseudo library \`$file'" 1>&2 - exit 1 - fi - $echo "$modename: warning: relinking \`$file'" 1>&2 - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - continue - fi - fi - - # See the names of the shared library. - set dummy $library_names - if test -n "$2"; then - realname="$2" - shift - shift - - srcname="$realname" - test "$hardcode_into_libs" = all && srcname="$realname"T - - # Install the shared library and build the symlinks. - $show "$install_prog $dir/$srcname $destdir/$realname" - $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? - if test -n "$stripme" && test -n "$striplib"; then - $show "$striplib $destdir/$realname" - $run eval "$striplib $destdir/$realname" || exit $? - fi - - if test $# -gt 0; then - # Delete the old symlinks, and create new ones. - for linkname - do - if test "$linkname" != "$realname"; then - $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" - fi - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - eval cmds=\"$postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - fi - - # Install the pseudo-library for information purposes. - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - instname="$dir/$name"i - $show "$install_prog $instname $destdir/$name" - $run eval "$install_prog $instname $destdir/$name" || exit $? - - # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$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 - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case "$destfile" in - *.lo) - staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; - esac - - # Install the libtool object if requested. - if test -n "$destfile"; then - $show "$install_prog $file $destfile" - $run eval "$install_prog $file $destfile" || exit $? - fi - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` - - $show "$install_prog $staticobj $staticdest" - $run eval "$install_prog \$staticobj \$staticdest" || exit $? - fi - exit 0 - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - destfile="$destdir/$destfile" - fi - - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - link_against_libtool_libs= - relink_command= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Check the variables that should have been set. - if test -z "$link_against_libtool_libs"; then - $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 - exit 1 - fi - - finalize=yes - for lib in $link_against_libtool_libs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - # If there is no directory component, then add one. - case "$lib" in - */* | *\\*) . $lib ;; - *) . ./$lib ;; - esac - fi - libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 - finalize=no - fi - done - - relink_command= - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - if test "$finalize" = yes && test -z "$run"; then - tmpdir="/tmp" - test -n "$TMPDIR" && tmpdir="$TMPDIR" - tmpdir="$tmpdir/libtool-$$" - if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : - else - $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 - continue - fi - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` - - $show "$relink_command" - if $run eval "$relink_command"; then : - else - $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 - ${rm}r "$tmpdir" - continue - fi - file="$outputname" - else - $echo "$modename: warning: cannot relink \`$file'" 1>&2 - fi - else - # Install the binary that we compiled earlier. - file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - $show "$install_prog$stripme $file $destfile" - $run eval "$install_prog\$stripme \$file \$destfile" || exit $? - test -n "$outputname" && ${rm}r "$tmpdir" - ;; - esac - done - - for file in $staticlibs; do - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - - $show "$install_prog $file $oldlib" - $run eval "$install_prog \$file \$oldlib" || exit $? - - if test -n "$stripme" && test -n "$striplib"; then - $show "$old_striplib $oldlib" - $run eval "$old_striplib $oldlib" || exit $? - fi - - # Do each command in the postinstall commands. - eval cmds=\"$old_postinstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || exit $? - done - IFS="$save_ifs" - done - - if test -n "$future_libdirs"; then - $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 - fi - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - test -n "$run" && current_libdirs=" -n$current_libdirs" - exec $SHELL $0 --finish$current_libdirs - exit 1 - fi - - exit 0 - ;; - - # libtool finish mode - finish) - modename="$modename: finish" - libdirs="$nonopt" - admincmds= - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done - - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - eval cmds=\"$finish_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" || admincmds="$admincmds - $cmd" - done - IFS="$save_ifs" - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $run eval "$cmds" || admincmds="$admincmds - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - test "$show" = : && exit 0 - - 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 \`-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" - echo "more information, such as the ld(1) and ld.so(8) manual pages." - echo "----------------------------------------------------------------------" - exit 0 - ;; - - # libtool execute mode - execute) - modename="$modename: execute" - - # The first argument is the command name. - cmd="$nonopt" - if test -z "$cmd"; then - $echo "$modename: you must specify a COMMAND" 1>&2 - $echo "$help" - exit 1 - fi - - # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do - if test ! -f "$file"; then - $echo "$modename: \`$file' is not a file" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - dir= - case "$file" in - *.la) - # Check to see that this really is a libtool archive. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : - else - $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - # Read the libtool library. - dlname= - library_names= - - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" - continue - fi - - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - - if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" - else - $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 - exit 1 - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - test "X$dir" = "X$file" && dir=. - ;; - - *) - $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 - 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 - -*) ;; - *) - # Do a test to see if this is really a libtool program. - if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - # If there is no directory component, then add one. - case "$file" in - */* | *\\*) . $file ;; - *) . ./$file ;; - esac - - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` - args="$args \"$file\"" - done - - if test -z "$run"; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved enviroment variables - if test "${save_LC_ALL+set}" = set; then - LC_ALL="$save_LC_ALL"; export LC_ALL - fi - if test "${save_LANG+set}" = set; then - LANG="$save_LANG"; export LANG - fi - - # Now actually exec the command. - eval "exec \$cmd$args" - - $echo "$modename: cannot exec \$cmd$args" - exit 1 - else - # 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 0 - fi - ;; - - # libtool clean and uninstall mode - clean | uninstall) - modename="$modename: $mode" - rm="$nonopt" - files= - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case "$arg" in - -*) rm="$rm $arg" ;; - *) files="$files $arg" ;; - esac - done - - if test -z "$rm"; then - $echo "$modename: you must specify an RM program" 1>&2 - $echo "$help" 1>&2 - exit 1 - fi - - for file in $files; do - dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` - if test "X$dir" = "X$file"; then - dir=. - objdir="$objdir" - else - objdir="$dir/$objdir" - fi - name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` - test $mode = uninstall && objdir="$dir" - - rmfiles="$file" - - case "$name" in - *.la) - # Possibly a libtool archive, so verify it. - if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - . $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" - done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" - test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" - - if test $mode = uninstall; then - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - eval cmds=\"$postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - eval cmds=\"$old_postuninstall_cmds\" - IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - $show "$cmd" - $run eval "$cmd" - done - IFS="$save_ifs" - fi - # FIXME: should reinstall the best remaining shared library. - fi - fi - ;; - - *.lo) - if test "$build_old_libs" = yes; then - oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` - rmfiles="$rmfiles $dir/$oldobj" - fi - ;; - - *) - # Do a test to see if this is a libtool program. - if test $mode = clean && - (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then - relink_command= - . $dir/$file - - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" - fi - fi - ;; - esac - $show "$rm $rmfiles" - $run $rm $rmfiles - done - exit 0 - ;; - - "") - $echo "$modename: you must specify a MODE" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 - ;; - esac - - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$generic_help" 1>&2 - exit 1 -fi # test -z "$show_help" - -# We need to display help for each of the modes. -case "$mode" in -"") $echo \ -"Usage: $modename [OPTION]... [MODE-ARG]... - -Provide generalized library-building support services. - - --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 - --finish same as \`--mode=finish' - --help display this help message and exit - --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] - --quiet same as \`--silent' - --silent don't print informational messages - --version print version information - -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. Try \`$modename --help --mode=MODE' for -a more detailed description of MODE." - exit 0 - ;; - -clean) - $echo \ -"Usage: $modename [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: $modename [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 - -static always build a \`.o' file suitable for static linking - -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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - -link) - $echo \ -"Usage: $modename [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 - -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 - -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 - -static do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -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: $modename [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." - ;; - -*) - $echo "$modename: invalid operation mode \`$mode'" 1>&2 - $echo "$help" 1>&2 - exit 1 - ;; -esac - -echo -$echo "Try \`$modename --help' for more information about other modes." - -exit 0 - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/rts/gmp/mdate-sh b/rts/gmp/mdate-sh deleted file mode 100644 index 37171f2..0000000 --- a/rts/gmp/mdate-sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. -# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. -# written by Ulrich Drepper , 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, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -# Get the extended ls output of the file or directory. -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -if ls -L /dev/null 1>/dev/null 2>&1; then - set - x`ls -L -l -d $1` -else - set - x`ls -l -d $1` -fi -# The month is at least the fourth argument -# (3 shifts here, the next inside the loop). -shift -shift -shift - -# Find the month. Next argument is day, followed by the year or time. -month= -until test $month -do - 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 - -day=$2 - -# 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 diff --git a/rts/gmp/memory.c b/rts/gmp/memory.c deleted file mode 100644 index 9df440c..0000000 --- a/rts/gmp/memory.c +++ /dev/null @@ -1,160 +0,0 @@ -/* Memory allocation routines. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include -#include /* for malloc, realloc, free */ - -#include "gmp.h" -#include "gmp-impl.h" - -#ifdef __NeXT__ -#define static -#endif - - -void * (*_mp_allocate_func) _PROTO ((size_t)) = _mp_default_allocate; -void * (*_mp_reallocate_func) _PROTO ((void *, size_t, size_t)) - = _mp_default_reallocate; -void (*_mp_free_func) _PROTO ((void *, size_t)) = _mp_default_free; - - -/* Default allocation functions. In case of failure to allocate/reallocate - an error message is written to stderr and the program aborts. */ - -void * -#if __STDC__ -_mp_default_allocate (size_t size) -#else -_mp_default_allocate (size) - size_t size; -#endif -{ - void *ret; -#ifdef DEBUG - size_t req_size = size; - size += 2 * BYTES_PER_MP_LIMB; -#endif - ret = malloc (size); - if (ret == 0) - { - perror ("cannot allocate in gmp"); - abort (); - } - -#ifdef DEBUG - { - mp_ptr p = ret; - p++; - p[-1] = (0xdeadbeef << 31) + 0xdeafdeed; - if (req_size % BYTES_PER_MP_LIMB == 0) - p[req_size / BYTES_PER_MP_LIMB] = ~((0xdeadbeef << 31) + 0xdeafdeed); - ret = p; - } -#endif - return ret; -} - -void * -#if __STDC__ -_mp_default_reallocate (void *oldptr, size_t old_size, size_t new_size) -#else -_mp_default_reallocate (oldptr, old_size, new_size) - void *oldptr; - size_t old_size; - size_t new_size; -#endif -{ - 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 % BYTES_PER_MP_LIMB == 0) - if (p[old_size / BYTES_PER_MP_LIMB] != ~((0xdeadbeef << 31) + 0xdeafdeed)) - { - fprintf (stderr, "gmp: (realloc) data clobbered after allocation block\n"); - abort (); - } - oldptr = p - 1; - } - - new_size += 2 * BYTES_PER_MP_LIMB; -#endif - - ret = realloc (oldptr, new_size); - if (ret == 0) - { - perror ("cannot allocate in gmp"); - abort (); - } - -#ifdef DEBUG - { - mp_ptr p = ret; - p++; - p[-1] = (0xdeadbeef << 31) + 0xdeafdeed; - if (req_size % BYTES_PER_MP_LIMB == 0) - p[req_size / BYTES_PER_MP_LIMB] = ~((0xdeadbeef << 31) + 0xdeafdeed); - ret = p; - } -#endif - return ret; -} - -void -#if __STDC__ -_mp_default_free (void *blk_ptr, size_t blk_size) -#else -_mp_default_free (blk_ptr, blk_size) - void *blk_ptr; - size_t blk_size; -#endif -{ -#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 % BYTES_PER_MP_LIMB == 0) - if (p[blk_size / BYTES_PER_MP_LIMB] != ~((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/rts/gmp/missing b/rts/gmp/missing deleted file mode 100644 index c60e9d7..0000000 --- a/rts/gmp/missing +++ /dev/null @@ -1,244 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. -# Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: - -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch]" - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing 0.2 - GNU automake" - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - - aclocal) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acinclude.m4' or \`configure.in'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`configure.in'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`acconfig.h' or \`configure.in'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is missing on your system. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; - - tar) - shift - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - fi - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar ${1+"$@"} && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar ${1+"$@"} && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" ${1+"$@"} && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" ${1+"$@"} && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and you do not seem to have it handy on your - system. You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequirements for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 diff --git a/rts/gmp/mkinstalldirs b/rts/gmp/mkinstalldirs deleted file mode 100644 index 5e17cd3..0000000 --- a/rts/gmp/mkinstalldirs +++ /dev/null @@ -1,38 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain - -errstatus=0 - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# mkinstalldirs ends here diff --git a/rts/gmp/mp.h b/rts/gmp/mp.h deleted file mode 100644 index ffab4cb..0000000 --- a/rts/gmp/mp.h +++ /dev/null @@ -1,124 +0,0 @@ -/* mp.h -- Definitions for Berkeley compatible multiple precision functions. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifndef __MP_H__ - -#ifndef __GNU_MP__ /* to allow inclusion of both gmp.h and mp.h */ -#define __GNU_MP__ 3 -#define __need_size_t -#include -#undef __need_size_t - -#if defined (__STDC__) || defined (__cplusplus) -#define __gmp_const const -#else -#define __gmp_const -#endif - -#if defined (__GNUC__) -#define __gmp_inline __inline__ -#else -#define __gmp_inline -#endif - -#ifndef _EXTERN_INLINE -#ifdef __GNUC__ -#define _EXTERN_INLINE extern __inline__ -#else -#define _EXTERN_INLINE static -#endif -#endif - -#ifdef _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 mp_limb_t * mp_ptr; -typedef __gmp_const mp_limb_t * mp_srcptr; -typedef int mp_size_t; -typedef long int mp_exp_t; - -typedef struct -{ - int _mp_alloc; /* Number of *limbs* allocated and pointed - to by the D field. */ - int _mp_size; /* abs(SIZE) is the number of limbs - the last field points to. If SIZE - is negative this is a negative - number. */ - mp_limb_t *_mp_d; /* Pointer to the limbs. */ -} __mpz_struct; -#endif /* __GNU_MP__ */ - -/* User-visible types. */ -typedef __mpz_struct MINT; - - -#ifndef _PROTO -#if (__STDC__-0) || defined (__cplusplus) -#define _PROTO(x) x -#else -#define _PROTO(x) () -#endif -#endif - -#if defined (__cplusplus) -extern "C" { -#endif - -#define mp_set_memory_functions __gmp_set_memory_functions -void mp_set_memory_functions _PROTO ((void *(*) (size_t), - void *(*) (void *, size_t, size_t), - void (*) (void *, size_t))); -MINT *itom _PROTO ((signed short int)); -MINT *xtom _PROTO ((const char *)); -void move _PROTO ((const MINT *, MINT *)); -void madd _PROTO ((const MINT *, const MINT *, MINT *)); -void msub _PROTO ((const MINT *, const MINT *, MINT *)); -void mult _PROTO ((const MINT *, const MINT *, MINT *)); -void mdiv _PROTO ((const MINT *, const MINT *, MINT *, MINT *)); -void sdiv _PROTO ((const MINT *, signed short int, MINT *, signed short int *)); -void msqrt _PROTO ((const MINT *, MINT *, MINT *)); -void pow _PROTO ((const MINT *, const MINT *, const MINT *, MINT *)); -void rpow _PROTO ((const MINT *, signed short int, MINT *)); -void gcd _PROTO ((const MINT *, const MINT *, MINT *)); -int mcmp _PROTO ((const MINT *, const MINT *)); -void min _PROTO ((MINT *)); -void mout _PROTO ((const MINT *)); -char *mtox _PROTO ((const MINT *)); -void mfree _PROTO ((MINT *)); - -#if defined (__cplusplus) -} -#endif - -#define __MP_H__ -#endif /* __MP_H__ */ diff --git a/rts/gmp/mp_bpl.c b/rts/gmp/mp_bpl.c deleted file mode 100644 index df8b03e..0000000 --- a/rts/gmp/mp_bpl.c +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" - -const int mp_bits_per_limb = BITS_PER_MP_LIMB; -const int __gmp_0 = 0; -int __gmp_junk; diff --git a/rts/gmp/mp_clz_tab.c b/rts/gmp/mp_clz_tab.c deleted file mode 100644 index 1bbd1d6..0000000 --- a/rts/gmp/mp_clz_tab.c +++ /dev/null @@ -1,36 +0,0 @@ -/* __clz_tab -- support for longlong.h - -Copyright (C) 1991, 1993, 1994, 1996, 1997 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -const -unsigned char __clz_tab[] = -{ - 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,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, - 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, - 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, -}; diff --git a/rts/gmp/mp_minv_tab.c b/rts/gmp/mp_minv_tab.c deleted file mode 100644 index 4afff85..0000000 --- a/rts/gmp/mp_minv_tab.c +++ /dev/null @@ -1,50 +0,0 @@ -/* A table of data supporting modlimb_invert(). - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND MAY CHANGE - INCOMPATIBLY OR DISAPPEAR IN A FUTURE GNU MP RELEASE. */ - -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -/* modlimb_invert_table[i] is the multiplicative inverse of 2*i+1 mod 256, - ie. (modlimb_invert_table[i] * (2*i+1)) % 256 == 1 */ - -const unsigned char modlimb_invert_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/rts/gmp/mp_set_fns.c b/rts/gmp/mp_set_fns.c deleted file mode 100644 index 55d4d9d..0000000 --- a/rts/gmp/mp_set_fns.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mp_set_memory_functions -- Set the allocate, reallocate, and free functions - for use by the mp package. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mp_set_memory_functions (void *(*alloc_func) (size_t), - void *(*realloc_func) (void *, size_t, size_t), - void (*free_func) (void *, size_t)) -#else -mp_set_memory_functions (alloc_func, realloc_func, free_func) - void *(*alloc_func) (); - void *(*realloc_func) (); - void (*free_func) (); -#endif -{ - if (alloc_func == 0) - alloc_func = _mp_default_allocate; - if (realloc_func == 0) - realloc_func = _mp_default_reallocate; - if (free_func == 0) - free_func = _mp_default_free; - - _mp_allocate_func = alloc_func; - _mp_reallocate_func = realloc_func; - _mp_free_func = free_func; -} diff --git a/rts/gmp/mpn/Makefile.am b/rts/gmp/mpn/Makefile.am deleted file mode 100644 index 1c49ccd..0000000 --- a/rts/gmp/mpn/Makefile.am +++ /dev/null @@ -1,94 +0,0 @@ -## Process this file with automake to generate Makefile.in - -# Copyright (C) 1996, 1998, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -AUTOMAKE_OPTIONS = gnu no-dependencies -SUBDIRS = tests - -CPP = @CPP@ - -# -DOPERATION_$* tells multi-function files which function to produce. -INCLUDES = -I$(top_srcdir) -DOPERATION_$* - -GENERIC_SOURCES = mp_bases.c -OFILES = @mpn_objects@ - -noinst_LTLIBRARIES = libmpn.la -libmpn_la_SOURCES = $(GENERIC_SOURCES) -libmpn_la_LIBADD = $(OFILES) -libmpn_la_DEPENDENCIES = $(OFILES) - -TARG_DIST = a29k alpha arm clipper cray generic hppa i960 lisp m68k m88k \ - mips2 mips3 ns32k pa64 pa64w power powerpc32 powerpc64 pyr sh sparc32 \ - sparc64 thumb vax x86 z8000 z8000x - -EXTRA_DIST = underscore.h asm-defs.m4 $(TARG_DIST) - -# COMPILE minus CC. FIXME: Really pass *_CFLAGS to CPP? -COMPILE_FLAGS = \ - $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) - -SUFFIXES = .s .S .asm - -# *.s are not preprocessed at all. -.s.o: - $(CCAS) $(COMPILE_FLAGS) $< -.s.obj: - $(CCAS) $(COMPILE_FLAGS) `cygpath -w $<` -.s.lo: - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) $< - -# *.S are preprocessed with CPP. -.S.o: - $(CPP) $(COMPILE_FLAGS) $< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.S.obj: - $(CPP) $(COMPILE_FLAGS) `cygpath -w $<` | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s - -# We have to rebuild the static object file without passing -DPIC to -# preprocessor. The overhead cost is one extra assemblation. FIXME: -# Teach libtool how to assemble with a preprocessor pass (CPP or m4). - -.S.lo: - $(CPP) $(COMPILE_FLAGS) -DPIC $< | grep -v '^#' >tmp-$*.s - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(CPP) $(COMPILE_FLAGS) $< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $*.o - rm -f tmp-$*.s - -# *.m4 are preprocessed with m4. -.asm.o: - $(M4) -DOPERATION_$* $< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.asm.obj: - $(M4) -DOPERATION_$* `cygpath -w $<` >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.asm.lo: - $(M4) -DPIC -DOPERATION_$* $< >tmp-$*.s - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(M4) -DOPERATION_$* $< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $*.o - rm -f tmp-$*.s diff --git a/rts/gmp/mpn/Makefile.in b/rts/gmp/mpn/Makefile.in deleted file mode 100644 index 59ee958..0000000 --- a/rts/gmp/mpn/Makefile.in +++ /dev/null @@ -1,472 +0,0 @@ -# Makefile.in generated automatically by automake 1.4a from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 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. - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_FLAG = -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : - -@SET_MAKE@ -build_alias = @build_alias@ -build_triplet = @build@ -host_alias = @host_alias@ -host_triplet = @host@ -target_alias = @target_alias@ -target_triplet = @target@ -AMDEP = @AMDEP@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CPP = @CPP@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -EXEEXT = @EXEEXT@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -SPEED_CYCLECOUNTER_OBJS = @SPEED_CYCLECOUNTER_OBJS@ -STRIP = @STRIP@ -U = @U@ -VERSION = @VERSION@ -gmp_srclinks = @gmp_srclinks@ -install_sh = @install_sh@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ - -# Copyright (C) 1996, 1998, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -AUTOMAKE_OPTIONS = gnu no-dependencies -SUBDIRS = - -CPP = @CPP@ - -# -DOPERATION_$* tells multi-function files which function to produce. -INCLUDES = -I$(top_srcdir) -DOPERATION_$* - -GENERIC_SOURCES = mp_bases.c -OFILES = @mpn_objects@ - -noinst_LTLIBRARIES = libmpn.la -libmpn_la_SOURCES = $(GENERIC_SOURCES) -libmpn_la_LIBADD = $(OFILES) -libmpn_la_DEPENDENCIES = $(OFILES) - -TARG_DIST = a29k alpha arm clipper cray generic hppa i960 lisp m68k m88k \ - mips2 mips3 ns32k pa64 pa64w power powerpc32 powerpc64 pyr sh sparc32 \ - sparc64 thumb vax x86 z8000 z8000x - - -EXTRA_DIST = underscore.h asm-defs.m4 $(TARG_DIST) - -# COMPILE minus CC. FIXME: Really pass *_CFLAGS to CPP? -COMPILE_FLAGS = \ - $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) - - -SUFFIXES = .s .S .asm -subdir = mpn -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I.. -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -libmpn_la_LDFLAGS = -am_libmpn_la_OBJECTS = mp_bases.lo -libmpn_la_OBJECTS = $(am_libmpn_la_OBJECTS) -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CFLAGS = @CFLAGS@ -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(libmpn_la_SOURCES) -DIST_COMMON = README Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -GZIP_ENV = --best -depcomp = -SOURCES = $(libmpn_la_SOURCES) -OBJECTS = $(am_libmpn_la_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .S .asm .c .lo .o .obj .s -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu mpn/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-noinstLTLIBRARIES: - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - -distclean-noinstLTLIBRARIES: - -maintainer-clean-noinstLTLIBRARIES: - -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -libmpn.la: $(libmpn_la_OBJECTS) $(libmpn_la_DEPENDENCIES) - $(LINK) $(libmpn_la_LDFLAGS) $(libmpn_la_OBJECTS) $(libmpn_la_LIBADD) $(LIBS) -.c.o: - $(COMPILE) -c $< -.c.obj: - $(COMPILE) -c `cygpath -w $<` -.c.lo: - $(LTCOMPILE) -c -o $@ $< - -# 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. - -all-recursive install-data-recursive install-exec-recursive \ -installdirs-recursive install-recursive uninstall-recursive \ -check-recursive installcheck-recursive info-recursive dvi-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; 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; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ - rev="$$subdir $$rev"; \ - if test "$$subdir" = "."; then dot_seen=yes; else :; fi; \ - done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -f$$here/ID $$unique $(LISP) - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || etags $(ETAGS_ARGS) $$tags $$unique $(LISP) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pR $$d/$$file $(distdir); \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - for subdir in $(SUBDIRS); do \ - if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ - || exit 1; \ - fi; \ - done -info-am: -info: info-recursive -dvi-am: -dvi: dvi-recursive -check-am: all-am -check: check-recursive -installcheck-am: -installcheck: installcheck-recursive -install-exec-am: -install-exec: install-exec-recursive - -install-data-am: -install-data: install-data-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-recursive -uninstall-am: -uninstall: uninstall-recursive -all-am: Makefile $(LTLIBRARIES) -all-redirect: all-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install -installdirs: installdirs-recursive -installdirs-am: - - -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: - -rm -f Makefile.in -mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags \ - mostlyclean-generic - -mostlyclean: mostlyclean-recursive - -clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \ - clean-tags clean-generic mostlyclean-am - -clean: clean-recursive - -distclean-am: distclean-noinstLTLIBRARIES distclean-compile \ - distclean-libtool distclean-tags distclean-generic \ - clean-am - -rm -f libtool - -distclean: distclean-recursive - -maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-generic \ - distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-recursive - -.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \ -clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \ -mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile mostlyclean-libtool distclean-libtool \ -clean-libtool maintainer-clean-libtool install-recursive \ -uninstall-recursive install-data-recursive uninstall-data-recursive \ -install-exec-recursive uninstall-exec-recursive installdirs-recursive \ -uninstalldirs-recursive all-recursive check-recursive \ -installcheck-recursive info-recursive dvi-recursive \ -mostlyclean-recursive distclean-recursive clean-recursive \ -maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ -install-exec install-data-am install-data install-am install \ -uninstall-am uninstall all-redirect all-am all install-strip \ -installdirs-am installdirs mostlyclean-generic distclean-generic \ -clean-generic maintainer-clean-generic clean mostlyclean distclean \ -maintainer-clean - - -# *.s are not preprocessed at all. -.s.o: - $(CCAS) $(COMPILE_FLAGS) $< -.s.obj: - $(CCAS) $(COMPILE_FLAGS) `cygpath -w $<` -.s.lo: - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) $< - -# *.S are preprocessed with CPP. -.S.o: - $(CPP) $(COMPILE_FLAGS) $< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.S.obj: - $(CPP) $(COMPILE_FLAGS) `cygpath -w $<` | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s - -# We have to rebuild the static object file without passing -DPIC to -# preprocessor. The overhead cost is one extra assemblation. FIXME: -# Teach libtool how to assemble with a preprocessor pass (CPP or m4). - -.S.lo: - $(CPP) $(COMPILE_FLAGS) -DPIC $< | grep -v '^#' >tmp-$*.s - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(CPP) $(COMPILE_FLAGS) $< | grep -v '^#' >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $*.o - rm -f tmp-$*.s - -# *.m4 are preprocessed with m4. -.asm.o: - $(M4) -DOPERATION_$* $< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.asm.obj: - $(M4) -DOPERATION_$* `cygpath -w $<` >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - rm -f tmp-$*.s -.asm.lo: - $(M4) -DPIC -DOPERATION_$* $< >tmp-$*.s - $(LIBTOOL) --mode=compile $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $@ - $(M4) -DOPERATION_$* $< >tmp-$*.s - $(CCAS) $(COMPILE_FLAGS) tmp-$*.s -o $*.o - rm -f tmp-$*.s - -# 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/rts/gmp/mpn/README b/rts/gmp/mpn/README deleted file mode 100644 index 7453c9d..0000000 --- a/rts/gmp/mpn/README +++ /dev/null @@ -1,13 +0,0 @@ -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/rts/gmp/mpn/a29k/add_n.s b/rts/gmp/mpn/a29k/add_n.s deleted file mode 100644 index e3ee6df..0000000 --- a/rts/gmp/mpn/a29k/add_n.s +++ /dev/null @@ -1,120 +0,0 @@ -; 29000 __gmpn_add -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; s2_ptr lr4 -; size lr5 - -; We use the loadm/storem instructions and operate on chunks of 8 -; limbs/per iteration, until less than 8 limbs remain. - -; The 29k has no addition or subtraction instructions that doesn't -; affect carry, so we need to save and restore that as soon as we -; adjust the pointers. gr116 is used for this purpose. Note that -; gr116==0 means that carry should be set. - - .sect .lit,lit - .text - .align 4 - .global ___gmpn_add_n - .word 0x60000 -___gmpn_add_n: - srl gr117,lr5,3 - sub gr118,gr117,1 - jmpt gr118,Ltail - constn gr116,-1 ; init cy reg - sub gr117,gr117,2 ; count for jmpfdec - -; Main loop working 8 limbs/iteration. -Loop: mtsrim cr,(8-1) - loadm 0,0,gr96,lr3 - add lr3,lr3,32 - mtsrim cr,(8-1) - loadm 0,0,gr104,lr4 - add lr4,lr4,32 - - subr gr116,gr116,0 ; restore carry - addc gr96,gr96,gr104 - addc gr97,gr97,gr105 - addc gr98,gr98,gr106 - addc gr99,gr99,gr107 - addc gr100,gr100,gr108 - addc gr101,gr101,gr109 - addc gr102,gr102,gr110 - addc gr103,gr103,gr111 - subc gr116,gr116,gr116 ; gr116 = not(cy) - - mtsrim cr,(8-1) - storem 0,0,gr96,lr2 - jmpfdec gr117,Loop - add lr2,lr2,32 - -; Code for the last up-to-7 limbs. -; This code might look very strange, but it's hard to write it -; differently without major slowdown. - - and lr5,lr5,(8-1) -Ltail: sub gr118,lr5,1 ; count for CR - jmpt gr118,Lend - sub gr117,lr5,2 ; count for jmpfdec - - mtsr cr,gr118 - loadm 0,0,gr96,lr3 - mtsr cr,gr118 - loadm 0,0,gr104,lr4 - - subr gr116,gr116,0 ; restore carry - - jmpfdec gr117,L1 - addc gr96,gr96,gr104 - jmp Lstore - mtsr cr,gr118 -L1: jmpfdec gr117,L2 - addc gr97,gr97,gr105 - jmp Lstore - mtsr cr,gr118 -L2: jmpfdec gr117,L3 - addc gr98,gr98,gr106 - jmp Lstore - mtsr cr,gr118 -L3: jmpfdec gr117,L4 - addc gr99,gr99,gr107 - jmp Lstore - mtsr cr,gr118 -L4: jmpfdec gr117,L5 - addc gr100,gr100,gr108 - jmp Lstore - mtsr cr,gr118 -L5: jmpfdec gr117,L6 - addc gr101,gr101,gr109 - jmp Lstore - mtsr cr,gr118 -L6: addc gr102,gr102,gr110 - -Lstore: storem 0,0,gr96,lr2 - subc gr116,gr116,gr116 ; gr116 = not(cy) - -Lend: jmpi lr0 - add gr96,gr116,1 diff --git a/rts/gmp/mpn/a29k/addmul_1.s b/rts/gmp/mpn/a29k/addmul_1.s deleted file mode 100644 index f51b6d7..0000000 --- a/rts/gmp/mpn/a29k/addmul_1.s +++ /dev/null @@ -1,113 +0,0 @@ -; 29000 __gmpn_addmul_1 -- Multiply a limb vector with a single limb and -; add the product to a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; size lr4 -; s2_limb lr5 - - .cputype 29050 - .sect .lit,lit - .text - .align 4 - .global ___gmpn_addmul_1 - .word 0x60000 -___gmpn_addmul_1: - sub lr4,lr4,8 - jmpt lr4,Ltail - const gr120,0 ; init cylimb reg - - srl gr117,lr4,3 ; divide by 8 - sub gr117,gr117,1 ; count for jmpfdec - -Loop: mtsrim cr,(8-1) - loadm 0,0,gr96,lr3 - add lr3,lr3,32 - - multiplu gr104,gr96,lr5 - multmu gr96,gr96,lr5 - multiplu gr105,gr97,lr5 - multmu gr97,gr97,lr5 - multiplu gr106,gr98,lr5 - multmu gr98,gr98,lr5 - multiplu gr107,gr99,lr5 - multmu gr99,gr99,lr5 - multiplu gr108,gr100,lr5 - multmu gr100,gr100,lr5 - multiplu gr109,gr101,lr5 - multmu gr101,gr101,lr5 - multiplu gr110,gr102,lr5 - multmu gr102,gr102,lr5 - multiplu gr111,gr103,lr5 - multmu gr103,gr103,lr5 - - add gr104,gr104,gr120 - addc gr105,gr105,gr96 - addc gr106,gr106,gr97 - addc gr107,gr107,gr98 - addc gr108,gr108,gr99 - addc gr109,gr109,gr100 - addc gr110,gr110,gr101 - addc gr111,gr111,gr102 - addc gr120,gr103,0 - - mtsrim cr,(8-1) - loadm 0,0,gr96,lr2 - - add gr104,gr96,gr104 - addc gr105,gr97,gr105 - addc gr106,gr98,gr106 - addc gr107,gr99,gr107 - addc gr108,gr100,gr108 - addc gr109,gr101,gr109 - addc gr110,gr102,gr110 - addc gr111,gr103,gr111 - addc gr120,gr120,0 - - mtsrim cr,(8-1) - storem 0,0,gr104,lr2 - jmpfdec gr117,Loop - add lr2,lr2,32 - -Ltail: and lr4,lr4,(8-1) - sub gr118,lr4,1 ; count for CR - jmpt gr118,Lend - sub lr4,lr4,2 - sub lr2,lr2,4 ; offset res_ptr by one limb - -Loop2: load 0,0,gr116,lr3 - add lr3,lr3,4 - multiplu gr117,gr116,lr5 - multmu gr118,gr116,lr5 - add lr2,lr2,4 - load 0,0,gr119,lr2 - add gr117,gr117,gr120 - addc gr118,gr118,0 - add gr117,gr117,gr119 - store 0,0,gr117,lr2 - jmpfdec lr4,Loop2 - addc gr120,gr118,0 - -Lend: jmpi lr0 - or gr96,gr120,0 ; copy diff --git a/rts/gmp/mpn/a29k/lshift.s b/rts/gmp/mpn/a29k/lshift.s deleted file mode 100644 index 93e1917..0000000 --- a/rts/gmp/mpn/a29k/lshift.s +++ /dev/null @@ -1,93 +0,0 @@ -; 29000 __gmpn_lshift -- - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; s2_ptr lr4 -; size lr5 - -; We use the loadm/storem instructions and operate on chunks of 8 -; limbs/per iteration, until less than 8 limbs remain. - - .sect .lit,lit - .text - .align 4 - .global ___gmpn_lshift - .word 0x60000 -___gmpn_lshift: - sll gr116,lr4,2 - add lr3,gr116,lr3 - add lr2,gr116,lr2 - sub lr3,lr3,4 - load 0,0,gr119,lr3 - - subr gr116,lr5,32 - srl gr96,gr119,gr116 ; return value - sub lr4,lr4,1 ; actual loop count is SIZE - 1 - - srl gr117,lr4,3 ; chuck count = (actual count) / 8 - cpeq gr118,gr117,0 - jmpt gr118,Ltail - mtsr fc,lr5 - - sub gr117,gr117,2 ; count for jmpfdec - -; Main loop working 8 limbs/iteration. -Loop: sub lr3,lr3,32 - mtsrim cr,(8-1) - loadm 0,0,gr100,lr3 - - extract gr109,gr119,gr107 - extract gr108,gr107,gr106 - extract gr107,gr106,gr105 - extract gr106,gr105,gr104 - extract gr105,gr104,gr103 - extract gr104,gr103,gr102 - extract gr103,gr102,gr101 - extract gr102,gr101,gr100 - - sub lr2,lr2,32 - mtsrim cr,(8-1) - storem 0,0,gr102,lr2 - jmpfdec gr117,Loop - or gr119,gr100,0 - -; Code for the last up-to-7 limbs. - - and lr4,lr4,(8-1) -Ltail: cpeq gr118,lr4,0 - jmpt gr118,Lend - sub lr4,lr4,2 ; count for jmpfdec - -Loop2: sub lr3,lr3,4 - load 0,0,gr116,lr3 - extract gr117,gr119,gr116 - sub lr2,lr2,4 - store 0,0,gr117,lr2 - jmpfdec lr4,Loop2 - or gr119,gr116,0 - -Lend: extract gr117,gr119,0 - sub lr2,lr2,4 - jmpi lr0 - store 0,0,gr117,lr2 diff --git a/rts/gmp/mpn/a29k/mul_1.s b/rts/gmp/mpn/a29k/mul_1.s deleted file mode 100644 index 6bcf7ce..0000000 --- a/rts/gmp/mpn/a29k/mul_1.s +++ /dev/null @@ -1,97 +0,0 @@ -; 29000 __gmpn_mul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; size lr4 -; s2_limb lr5 - - .cputype 29050 - .sect .lit,lit - .text - .align 4 - .global ___gmpn_mul_1 - .word 0x60000 -___gmpn_mul_1: - sub lr4,lr4,8 - jmpt lr4,Ltail - const gr120,0 ; init cylimb reg - - srl gr117,lr4,3 ; divide by 8 - sub gr117,gr117,1 ; count for jmpfdec - -Loop: mtsrim cr,(8-1) - loadm 0,0,gr96,lr3 - add lr3,lr3,32 - - multiplu gr104,gr96,lr5 - multmu gr96,gr96,lr5 - multiplu gr105,gr97,lr5 - multmu gr97,gr97,lr5 - multiplu gr106,gr98,lr5 - multmu gr98,gr98,lr5 - multiplu gr107,gr99,lr5 - multmu gr99,gr99,lr5 - multiplu gr108,gr100,lr5 - multmu gr100,gr100,lr5 - multiplu gr109,gr101,lr5 - multmu gr101,gr101,lr5 - multiplu gr110,gr102,lr5 - multmu gr102,gr102,lr5 - multiplu gr111,gr103,lr5 - multmu gr103,gr103,lr5 - - add gr104,gr104,gr120 - addc gr105,gr105,gr96 - addc gr106,gr106,gr97 - addc gr107,gr107,gr98 - addc gr108,gr108,gr99 - addc gr109,gr109,gr100 - addc gr110,gr110,gr101 - addc gr111,gr111,gr102 - addc gr120,gr103,0 - - mtsrim cr,(8-1) - storem 0,0,gr104,lr2 - jmpfdec gr117,Loop - add lr2,lr2,32 - -Ltail: and lr4,lr4,(8-1) - sub gr118,lr4,1 ; count for CR - jmpt gr118,Lend - sub lr4,lr4,2 - sub lr2,lr2,4 ; offset res_ptr by one limb - -Loop2: load 0,0,gr116,lr3 - add lr3,lr3,4 - multiplu gr117,gr116,lr5 - multmu gr118,gr116,lr5 - add lr2,lr2,4 - add gr117,gr117,gr120 - store 0,0,gr117,lr2 - jmpfdec lr4,Loop2 - addc gr120,gr118,0 - -Lend: jmpi lr0 - or gr96,gr120,0 ; copy diff --git a/rts/gmp/mpn/a29k/rshift.s b/rts/gmp/mpn/a29k/rshift.s deleted file mode 100644 index ea163bf..0000000 --- a/rts/gmp/mpn/a29k/rshift.s +++ /dev/null @@ -1,89 +0,0 @@ -; 29000 __gmpn_rshift -- - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; s2_ptr lr4 -; size lr5 - -; We use the loadm/storem instructions and operate on chunks of 8 -; limbs/per iteration, until less than 8 limbs remain. - - .sect .lit,lit - .text - .align 4 - .global ___gmpn_rshift - .word 0x60000 -___gmpn_rshift: - load 0,0,gr119,lr3 - add lr3,lr3,4 - - subr gr116,lr5,32 - sll gr96,gr119,gr116 ; return value - sub lr4,lr4,1 ; actual loop count is SIZE - 1 - - srl gr117,lr4,3 ; chuck count = (actual count) / 8 - cpeq gr118,gr117,0 - jmpt gr118,Ltail - mtsr fc,gr116 - - sub gr117,gr117,2 ; count for jmpfdec - -; Main loop working 8 limbs/iteration. -Loop: mtsrim cr,(8-1) - loadm 0,0,gr100,lr3 - add lr3,lr3,32 - - extract gr98,gr100,gr119 - extract gr99,gr101,gr100 - extract gr100,gr102,gr101 - extract gr101,gr103,gr102 - extract gr102,gr104,gr103 - extract gr103,gr105,gr104 - extract gr104,gr106,gr105 - extract gr105,gr107,gr106 - - mtsrim cr,(8-1) - storem 0,0,gr98,lr2 - add lr2,lr2,32 - jmpfdec gr117,Loop - or gr119,gr107,0 - -; Code for the last up-to-7 limbs. - - and lr4,lr4,(8-1) -Ltail: cpeq gr118,lr4,0 - jmpt gr118,Lend - sub lr4,lr4,2 ; count for jmpfdec - -Loop2: load 0,0,gr100,lr3 - add lr3,lr3,4 - extract gr117,gr100,gr119 - store 0,0,gr117,lr2 - add lr2,lr2,4 - jmpfdec lr4,Loop2 - or gr119,gr100,0 - -Lend: srl gr117,gr119,lr5 - jmpi lr0 - store 0,0,gr117,lr2 diff --git a/rts/gmp/mpn/a29k/sub_n.s b/rts/gmp/mpn/a29k/sub_n.s deleted file mode 100644 index c6b64c5..0000000 --- a/rts/gmp/mpn/a29k/sub_n.s +++ /dev/null @@ -1,120 +0,0 @@ -; 29000 __gmpn_sub -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; s2_ptr lr4 -; size lr5 - -; We use the loadm/storem instructions and operate on chunks of 8 -; limbs/per iteration, until less than 8 limbs remain. - -; The 29k has no addition or subtraction instructions that doesn't -; affect carry, so we need to save and restore that as soon as we -; adjust the pointers. gr116 is used for this purpose. Note that -; gr116==0 means that carry should be set. - - .sect .lit,lit - .text - .align 4 - .global ___gmpn_sub_n - .word 0x60000 -___gmpn_sub_n: - srl gr117,lr5,3 - sub gr118,gr117,1 - jmpt gr118,Ltail - constn gr116,-1 ; init cy reg - sub gr117,gr117,2 ; count for jmpfdec - -; Main loop working 8 limbs/iteration. -Loop: mtsrim cr,(8-1) - loadm 0,0,gr96,lr3 - add lr3,lr3,32 - mtsrim cr,(8-1) - loadm 0,0,gr104,lr4 - add lr4,lr4,32 - - subr gr116,gr116,0 ; restore carry - subc gr96,gr96,gr104 - subc gr97,gr97,gr105 - subc gr98,gr98,gr106 - subc gr99,gr99,gr107 - subc gr100,gr100,gr108 - subc gr101,gr101,gr109 - subc gr102,gr102,gr110 - subc gr103,gr103,gr111 - subc gr116,gr116,gr116 ; gr116 = not(cy) - - mtsrim cr,(8-1) - storem 0,0,gr96,lr2 - jmpfdec gr117,Loop - add lr2,lr2,32 - -; Code for the last up-to-7 limbs. -; This code might look very strange, but it's hard to write it -; differently without major slowdown. - - and lr5,lr5,(8-1) -Ltail: sub gr118,lr5,1 ; count for CR - jmpt gr118,Lend - sub gr117,lr5,2 ; count for jmpfdec - - mtsr cr,gr118 - loadm 0,0,gr96,lr3 - mtsr cr,gr118 - loadm 0,0,gr104,lr4 - - subr gr116,gr116,0 ; restore carry - - jmpfdec gr117,L1 - subc gr96,gr96,gr104 - jmp Lstore - mtsr cr,gr118 -L1: jmpfdec gr117,L2 - subc gr97,gr97,gr105 - jmp Lstore - mtsr cr,gr118 -L2: jmpfdec gr117,L3 - subc gr98,gr98,gr106 - jmp Lstore - mtsr cr,gr118 -L3: jmpfdec gr117,L4 - subc gr99,gr99,gr107 - jmp Lstore - mtsr cr,gr118 -L4: jmpfdec gr117,L5 - subc gr100,gr100,gr108 - jmp Lstore - mtsr cr,gr118 -L5: jmpfdec gr117,L6 - subc gr101,gr101,gr109 - jmp Lstore - mtsr cr,gr118 -L6: subc gr102,gr102,gr110 - -Lstore: storem 0,0,gr96,lr2 - subc gr116,gr116,gr116 ; gr116 = not(cy) - -Lend: jmpi lr0 - add gr96,gr116,1 diff --git a/rts/gmp/mpn/a29k/submul_1.s b/rts/gmp/mpn/a29k/submul_1.s deleted file mode 100644 index ef97d8d..0000000 --- a/rts/gmp/mpn/a29k/submul_1.s +++ /dev/null @@ -1,116 +0,0 @@ -; 29000 __gmpn_submul_1 -- Multiply a limb vector with a single limb and -; subtract the product from a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr lr2 -; s1_ptr lr3 -; size lr4 -; s2_limb lr5 - - .cputype 29050 - .sect .lit,lit - .text - .align 4 - .global ___gmpn_submul_1 - .word 0x60000 -___gmpn_submul_1: - sub lr4,lr4,8 - jmpt lr4,Ltail - const gr120,0 ; init cylimb reg - - srl gr117,lr4,3 ; divide by 8 - sub gr117,gr117,1 ; count for jmpfdec - -Loop: mtsrim cr,(8-1) - loadm 0,0,gr96,lr3 - add lr3,lr3,32 - - multiplu gr104,gr96,lr5 - multmu gr96,gr96,lr5 - multiplu gr105,gr97,lr5 - multmu gr97,gr97,lr5 - multiplu gr106,gr98,lr5 - multmu gr98,gr98,lr5 - multiplu gr107,gr99,lr5 - multmu gr99,gr99,lr5 - multiplu gr108,gr100,lr5 - multmu gr100,gr100,lr5 - multiplu gr109,gr101,lr5 - multmu gr101,gr101,lr5 - multiplu gr110,gr102,lr5 - multmu gr102,gr102,lr5 - multiplu gr111,gr103,lr5 - multmu gr103,gr103,lr5 - - add gr104,gr104,gr120 - addc gr105,gr105,gr96 - addc gr106,gr106,gr97 - addc gr107,gr107,gr98 - addc gr108,gr108,gr99 - addc gr109,gr109,gr100 - addc gr110,gr110,gr101 - addc gr111,gr111,gr102 - addc gr120,gr103,0 - - mtsrim cr,(8-1) - loadm 0,0,gr96,lr2 - - sub gr96,gr96,gr104 - subc gr97,gr97,gr105 - subc gr98,gr98,gr106 - subc gr99,gr99,gr107 - subc gr100,gr100,gr108 - subc gr101,gr101,gr109 - subc gr102,gr102,gr110 - subc gr103,gr103,gr111 - - add gr104,gr103,gr111 ; invert carry from previus sub - addc gr120,gr120,0 - - mtsrim cr,(8-1) - storem 0,0,gr96,lr2 - jmpfdec gr117,Loop - add lr2,lr2,32 - -Ltail: and lr4,lr4,(8-1) - sub gr118,lr4,1 ; count for CR - jmpt gr118,Lend - sub lr4,lr4,2 - sub lr2,lr2,4 ; offset res_ptr by one limb - -Loop2: load 0,0,gr116,lr3 - add lr3,lr3,4 - multiplu gr117,gr116,lr5 - multmu gr118,gr116,lr5 - add lr2,lr2,4 - load 0,0,gr119,lr2 - add gr117,gr117,gr120 - addc gr118,gr118,0 - sub gr119,gr119,gr117 - add gr104,gr119,gr117 ; invert carry from previus sub - store 0,0,gr119,lr2 - jmpfdec lr4,Loop2 - addc gr120,gr118,0 - -Lend: jmpi lr0 - or gr96,gr120,0 ; copy diff --git a/rts/gmp/mpn/a29k/udiv.s b/rts/gmp/mpn/a29k/udiv.s deleted file mode 100644 index fdd53a9..0000000 --- a/rts/gmp/mpn/a29k/udiv.s +++ /dev/null @@ -1,30 +0,0 @@ -; Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - .sect .lit,lit - .text - .align 4 - .global ___udiv_qrnnd - .word 0x60000 -___udiv_qrnnd: - mtsr q,lr3 - dividu gr96,lr4,lr5 - mfsr gr116,q - jmpi lr0 - store 0,0,gr116,lr2 diff --git a/rts/gmp/mpn/a29k/umul.s b/rts/gmp/mpn/a29k/umul.s deleted file mode 100644 index 7741981..0000000 --- a/rts/gmp/mpn/a29k/umul.s +++ /dev/null @@ -1,29 +0,0 @@ -; Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - .sect .lit,lit - .text - .align 4 - .global ___umul_ppmm - .word 0x50000 -___umul_ppmm: - multiplu gr116,lr3,lr4 - multmu gr96,lr3,lr4 - jmpi lr0 - store 0,0,gr116,lr2 diff --git a/rts/gmp/mpn/alpha/README b/rts/gmp/mpn/alpha/README deleted file mode 100644 index 744260c..0000000 --- a/rts/gmp/mpn/alpha/README +++ /dev/null @@ -1,224 +0,0 @@ -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 code is very very different... - - -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 transfered 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 seems excellent, both for loads and - stores. Even when the working set is larger than the on-chip L1 and L2 - caches, the performance remain almost unaffected. - -2. mulq has a latency of 12 cycles and an issue rate of 1 each 8th cycle. - umulh has a measured latency of 14 cycles and an issue rate of 1 each - 10th cycle. But the exact timing is somewhat confusing. - -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. - -EV6 - -Here we have a really parallel pipeline, capable of issuing up to 4 integer -instructions per cycle. 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 iterative dependencies. - -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 the loop, 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, but -the execute efficiently. But 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 (?). - -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. - -The shift loops need (per limb): - 1 load (Lx pipes) - 1 store (Lx pipes) - 2 shift (Ux pipes) - 1 iaddlog (Lx pipes, Ux pipes) -Obviously, since the pipes are very equally loaded, we should get 4 insn/cycle, or 1.25 cycles/limb. - -For mpn_add_n, we currently have - 2 load (Lx pipes) - 1 store (Lx pipes) - 5 iaddlog (Lx pipes, Ux pipes) - -Again, we have a perfect balance and will be limited by carry propagation -delays, currently three cycles. The superoptimizer indicates that ther -might be sequences that--using a final cmov--have a carry propagation delay -of just two. Montgomery's subtraction sequence could perhaps be used, by -complementing some operands. All in all, we should get down to 2 cycles -without much problems. - -For mpn_mul_1, we could do, just like for mpn_add_n: - not newlo,notnewlo - addq cylimb,newlo,newlo || cmpult cylimb,notnewlo,cyout - addq cyout,newhi,cylimb -and get 2-cycle carry propagation. The instructions needed will be - 1 ld (Lx pipes) - 1 st (Lx pipes) - 2 mul (U1 pipe) - 4 iaddlog (Lx pipes, Ux pipes) -issue1: addq not mul ld -issue2: cmpult addq mul st -Conclusion: no cluster delays and 2-cycle carry delays will give us 2 cycles/limb! - -Last, we have mpn_addmul_1. Almost certainly, we will get down to 3 -cycles/limb, which would be absolutely awesome. - -Old, perhaps obsolete addmul_1 dependency diagram (needs 175 columns wide screen): - - i - s - s i - u n - e s - d t - r - i u -l n c -i s t -v t i -e r o - u n -v c -a t t -l i y -u o p -e n e -s s s - issue - in - cycle - -1 ldq - / \ - 0 | \ - | \ - 1 | | - | | - 2 | | ldq - | | / \ - 3 | mulq | \ - | \ | \ - 4 umulh \ | | - | | | | - 5 | | | | ldq - | | | | / \ - 4calm 6 | | ldq | mulq | \ - | | / | \ | \ - 4casm 7 | | / umulh \ | | -6 | || | | | | - 3aal 8 | || | | | | ldq -7 | || | | | | / \ - 4calm 9 | || | | ldq | mulq | \ -9 | || | | / | \ | \ - 4casm 10 | || | | / umulh \ | | -9 | || | || | | | | - 3aal 11 | addq | || | | | | ldq -9 | // \ | || | | | | / \ - 4calm 12 \ cmpult addq<-cy | || | | ldq | mulq | \ -13 \ / // \ | || | | / | \ | \ - 4casm 13 addq cmpult stq | || | | / umulh \ | | -11 \ / | || | || | | | | - 3aal 14 addq | addq | || | | | | ldq -10 \ | // \ | || | | | | / \ - 4calm 15 cy ----> \ cmpult addq<-cy | || | | ldq | mulq | \ -13 \ / // \ | || | | / | \ | \ - 4casm 16 addq cmpult stq | || | | / umulh \ | | -11 \ / | || | || | | | | - 3aal 17 addq | addq | || | | | | -10 \ | // \ | || | | | | - 4calm 18 cy ----> \ cmpult addq<-cy | || | | ldq | mulq -13 \ / // \ | || | | / | \ - 4casm 19 addq cmpult stq | || | | / umulh \ -11 \ / | || | || | | - 3aal 20 addq | addq | || | | -10 \ | // \ | || | | - 4calm 21 cy ----> \ cmpult addq<-cy | || | | ldq - \ / // \ | || | | / - 22 addq cmpult stq | || | | / - \ / | || | || - 23 addq | addq | || - \ | // \ | || - 24 cy ----> \ cmpult addq<-cy | || - \ / // \ | || - 25 addq cmpult stq | || - \ / | || - 26 addq | addq - \ | // \ - 27 cy ----> \ cmpult addq<-cy - \ / // \ - 28 addq cmpult stq - \ / -As many as 6 consecutive points will be under execution simultaneously, or if we addq -schedule loads even further away, maybe 7 or 8. But the number of live quantities \ -is reasonable, and can easily be satisfied. cy ----> diff --git a/rts/gmp/mpn/alpha/add_n.asm b/rts/gmp/mpn/alpha/add_n.asm deleted file mode 100644 index 08d6a9f..0000000 --- a/rts/gmp/mpn/alpha/add_n.asm +++ /dev/null @@ -1,114 +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 (C) 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_add_n) - ldq r3,0(r17) - ldq r4,0(r18) - - subq r19,1,r19 - and r19,4-1,r2 C number of limbs in first loop - bis r31,r31,r0 - beq r2,$L0 C if multiple of 4 limbs, skip first loop - - subq r19,r2,r19 - -$Loop0: subq r2,1,r2 - ldq r5,8(r17) - addq r4,r0,r4 - ldq r6,8(r18) - cmpult r4,r0,r1 - addq r3,r4,r4 - cmpult r4,r3,r0 - stq r4,0(r16) - bis r0,r1,r0 - - addq r17,8,r17 - addq r18,8,r18 - bis r5,r5,r3 - bis r6,r6,r4 - addq r16,8,r16 - bne r2,$Loop0 - -$L0: beq r19,$Lend - - ALIGN(8) -$Loop: subq r19,4,r19 - - ldq r5,8(r17) - addq r4,r0,r4 - ldq r6,8(r18) - cmpult r4,r0,r1 - addq r3,r4,r4 - cmpult r4,r3,r0 - stq r4,0(r16) - bis r0,r1,r0 - - ldq r3,16(r17) - addq r6,r0,r6 - ldq r4,16(r18) - cmpult r6,r0,r1 - addq r5,r6,r6 - cmpult r6,r5,r0 - stq r6,8(r16) - bis r0,r1,r0 - - ldq r5,24(r17) - addq r4,r0,r4 - ldq r6,24(r18) - cmpult r4,r0,r1 - addq r3,r4,r4 - cmpult r4,r3,r0 - stq r4,16(r16) - bis r0,r1,r0 - - ldq r3,32(r17) - addq r6,r0,r6 - ldq r4,32(r18) - cmpult r6,r0,r1 - addq r5,r6,r6 - cmpult r6,r5,r0 - stq r6,24(r16) - bis r0,r1,r0 - - addq r17,32,r17 - addq r18,32,r18 - addq r16,32,r16 - bne r19,$Loop - -$Lend: addq r4,r0,r4 - cmpult r4,r0,r1 - addq r3,r4,r4 - cmpult r4,r3,r0 - stq r4,0(r16) - bis r0,r1,r0 - ret r31,(r26),1 -EPILOGUE(mpn_add_n) -ASM_END() diff --git a/rts/gmp/mpn/alpha/addmul_1.asm b/rts/gmp/mpn/alpha/addmul_1.asm deleted file mode 100644 index 4ea900b..0000000 --- a/rts/gmp/mpn/alpha/addmul_1.asm +++ /dev/null @@ -1,87 +0,0 @@ -dnl Alpha __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright (C) 1992, 1994, 1995, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl s2_limb r19 - -dnl This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and 7 -dnl cycles/limb on EV6. - -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/rts/gmp/mpn/alpha/cntlz.asm b/rts/gmp/mpn/alpha/cntlz.asm deleted file mode 100644 index febb3b7..0000000 --- a/rts/gmp/mpn/alpha/cntlz.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl Alpha auxiliary for longlong.h's count_leading_zeros - -dnl Copyright (C) 1997, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl DISCUSSION: - -dnl Other methods have been tried, and using a 128-entry table actually trims -dnl about 10% of the execution time (on a 21164) when the table is in the L1 -dnl cache. But under non-benchmarking conditions, the table will hardly be in -dnl the L1 cache. Tricky bit-fiddling methods with multiplies and magic tables -dnl are also possible, but they require many more instructions than the current -dnl code. (But for count_trailing_zeros, such tricks are beneficial.) -dnl Finally, converting to floating-point and extracting the exponent is much -dnl slower. - -ASM_START() -PROLOGUE(MPN(count_leading_zeros)) - bis r31,63,r0 C initialize partial result count - - srl r16,32,r1 C shift down 32 steps -> r1 - cmovne r1,r1,r16 C select r1 if non-zero - cmovne r1,31,r0 C if r1 is nonzero choose smaller count - - srl r16,16,r1 C shift down 16 steps -> r1 - subq r0,16,r2 C generate new partial result count - cmovne r1,r1,r16 C choose new r1 if non-zero - cmovne r1,r2,r0 C choose new count if r1 was non-zero - - srl r16,8,r1 - subq r0,8,r2 - cmovne r1,r1,r16 - cmovne r1,r2,r0 - - srl r16,4,r1 - subq r0,4,r2 - cmovne r1,r1,r16 - cmovne r1,r2,r0 - - srl r16,2,r1 - subq r0,2,r2 - cmovne r1,r1,r16 - cmovne r1,r2,r0 - - srl r16,1,r1 C extract bit 1 - subq r0,r1,r0 C subtract it from partial result - - ret r31,(r26),1 -EPILOGUE(MPN(count_leading_zeros)) -ASM_END() diff --git a/rts/gmp/mpn/alpha/default.m4 b/rts/gmp/mpn/alpha/default.m4 deleted file mode 100644 index 5f4c48d..0000000 --- a/rts/gmp/mpn/alpha/default.m4 +++ /dev/null @@ -1,77 +0,0 @@ -divert(-1) - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -define(`ASM_START', - ` - .set noreorder - .set noat') - -define(`X',`0x$1') -define(`FLOAT64', - ` - .align 3 -$1: .t_floating $2') - -define(`PROLOGUE', - ` - .text - .align 3 - .globl $1 - .ent $1 -$1: - .frame r30,0,r26 - .prologue 0') - -define(`PROLOGUE_GP', - ` - .text - .align 3 - .globl $1 - .ent $1 -$1: - ldgp r29,0(r27) - .frame r30,0,r26 - .prologue 1') - -define(`EPILOGUE', - ` - .end $1') - -dnl Map register names r0, r1, etc, to `$0', `$1', etc. -dnl This is needed on all systems but Unicos -forloop(i,0,31, -`define(`r'i,``$''i)' -) -forloop(i,0,31, -`define(`f'i,``$f''i)' -) - -define(`DATASTART', - `dnl - DATA -$1:') -define(`DATAEND',`dnl') - -define(`ASM_END',`dnl') - -divert diff --git a/rts/gmp/mpn/alpha/ev5/add_n.asm b/rts/gmp/mpn/alpha/ev5/add_n.asm deleted file mode 100644 index 716d640..0000000 --- a/rts/gmp/mpn/alpha/ev5/add_n.asm +++ /dev/null @@ -1,143 +0,0 @@ -dnl Alpha EV5 __gmpn_add_n -- Add two limb vectors of the same length > 0 and -dnl store sum in a third limb vector. - -dnl Copyright (C) 1995, 1999, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_add_n) - bis r31,r31,r25 C clear cy - 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 - ldq r2,16(r18) - addq r0,r4,r20 C 1st main add - ldq r3,24(r18) - subq r19,4,r19 C decr loop cnt - ldq r6,-16(r17) - cmpult r20,r0,r25 C compute cy from last add - ldq r7,-8(r17) - 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(mpn_add_n) -ASM_END() diff --git a/rts/gmp/mpn/alpha/ev5/lshift.asm b/rts/gmp/mpn/alpha/ev5/lshift.asm deleted file mode 100644 index cb181dd..0000000 --- a/rts/gmp/mpn/alpha/ev5/lshift.asm +++ /dev/null @@ -1,169 +0,0 @@ -dnl Alpha EV5 __gmpn_lshift -- Shift a number left. - -dnl Copyright (C) 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl cnt r19 - -dnl This code runs at 3.25 cycles/limb on the EV5. - -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,$L0 - subq r18,r28,r18 - - ALIGN(8) -$Loop0: 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,$Loop0 - -$L0: sll r4,r19,r24 - beq r18,$Lend -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) - beq r18,$Lend1 -C warm up phase 2 - srl r1,r20,r7 - sll r1,r19,r21 - srl r2,r20,r8 - 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,$Lend2 - ALIGN(16) -C main loop -$Loop: 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,$Loop -C cool down phase 2/1 -$Lend2: 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 -$Lend1: srl r1,r20,r7 - sll r1,r19,r21 - srl r2,r20,r8 - 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 - -$Lend: stq r24,-8(r16) - ret r31,(r26),1 -EPILOGUE(mpn_lshift) -ASM_END() diff --git a/rts/gmp/mpn/alpha/ev5/rshift.asm b/rts/gmp/mpn/alpha/ev5/rshift.asm deleted file mode 100644 index 9940d83..0000000 --- a/rts/gmp/mpn/alpha/ev5/rshift.asm +++ /dev/null @@ -1,167 +0,0 @@ -dnl Alpha EV5 __gmpn_rshift -- Shift a number right. - -dnl Copyright (C) 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl cnt r19 - -dnl This code runs at 3.25 cycles/limb on the EV5. - -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,$L0 - subq r18,r28,r18 - - ALIGN(8) -$Loop0: 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,$Loop0 - -$L0: srl r4,r19,r24 - beq r18,$Lend -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) - beq r18,$Lend1 -C warm up phase 2 - sll r1,r20,r7 - srl r1,r19,r21 - sll r2,r20,r8 - 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,$Lend2 - ALIGN(16) -C main loop -$Loop: 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,$Loop -C cool down phase 2/1 -$Lend2: 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 -$Lend1: sll r1,r20,r7 - srl r1,r19,r21 - sll r2,r20,r8 - 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 - -$Lend: stq r24,0(r16) - ret r31,(r26),1 -EPILOGUE(mpn_rshift) -ASM_END() diff --git a/rts/gmp/mpn/alpha/ev5/sub_n.asm b/rts/gmp/mpn/alpha/ev5/sub_n.asm deleted file mode 100644 index 5248a2a..0000000 --- a/rts/gmp/mpn/alpha/ev5/sub_n.asm +++ /dev/null @@ -1,143 +0,0 @@ -dnl Alpha EV5 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 -dnl and store difference in a third limb vector. - -dnl Copyright (C) 1995, 1999, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_sub_n) - bis r31,r31,r25 C clear cy - 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 - ldq r2,16(r18) - subq r4,r0,r20 C 1st main subtract - ldq r3,24(r18) - subq r19,4,r19 C decr loop cnt - ldq r6,-16(r17) - cmpult r4,r0,r25 C compute cy from last subtract - ldq r7,-8(r17) - 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(mpn_sub_n) -ASM_END() diff --git a/rts/gmp/mpn/alpha/ev6/addmul_1.asm b/rts/gmp/mpn/alpha/ev6/addmul_1.asm deleted file mode 100644 index 2f58862..0000000 --- a/rts/gmp/mpn/alpha/ev6/addmul_1.asm +++ /dev/null @@ -1,474 +0,0 @@ -dnl Alpha ev6 mpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright (C) 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl s2_limb r19 - -dnl This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and -dnl exactly 3.625 cycles/limb on EV6... - -dnl This code was written in close cooperation with ev6 pipeline expert -dnl Steve Root (root@toober.hlo.dec.com). Any errors are tege's fault, though. -dnl -dnl Register usages for unrolled loop: -dnl 0-3 mul's -dnl 4-7 acc's -dnl 8-15 mul results -dnl 20,21 carry's -dnl 22,23 save for stores - -dnl Sustains 8 mul-adds in 29 cycles in the unrolled inner loop. - -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 -dnl carry's has to happen on one side {0} of the machine. Note, the total -dnl use of U0, and the total use of L0 (after attending to the stores). -dnl which is part of the reason why.... - -dnl This is a great schedule for the d_cache, a poor schedule for the -dnl b_cache. The lockup on U0 means that any stall can't be recovered -dnl from. Consider a ldq in L1. say that load gets stalled because it -dnl collides with a fill from the b_Cache. On the next cycle, this load -dnl gets priority. If first looks at L0, and goes there. The instruction -dnl we intended for L0 gets to look at L1, which is NOT where we want -dnl it. It either stalls 1, because it can't go in L0, or goes there, and -dnl causes a further instruction to stall. - -dnl So for b_cache, we're likely going to want to put one or more cycles -dnl back into the code! And, of course, put in prefetches. For the -dnl accumulator, lds, intent to modify. For the multiplier, you might -dnl want ldq, evict next, if you're not wanting to use it again soon. Use -dnl 256 ahead of present pointer value. At a place where we have an mt -dnl followed by a bookkeeping, put the bookkeeping in upper, and the -dnl prefetch into lower. - -dnl Note, the usage of physical registers per cycle is smoothed off, as -dnl much as possible. - -dnl Note, the ldq's and stq's are at the end of the quadpacks. note, we'd -dnl like not to have a ldq or stq to preceded a conditional branch in a -dnl quadpack. The conditional branch moves the retire pointer one cycle -dnl later. - -dnl Optimization notes: -dnl Callee-saves regs: r9 r10 r11 r12 r13 r14 r15 r26 ?r27? -dnl Reserved regs: r29 r30 r31 -dnl Free caller-saves regs in unrolled code: r24 r25 r28 -dnl We should swap some of the callee-saves regs for some of the free -dnl caller-saves regs, saving some overhead cycles. -dnl Most importantly, we should write fast code for the 0-7 case. -dnl The code we use there are for the 21164, and runs at 7 cycles/limb -dnl on the 21264. Should not be hard, if we write specialized code for -dnl 1-7 limbs (the one for 0 limbs should be straightforward). We then just -dnl need a jump table indexed by the low 3 bits of the count argument. - - -ASM_START() -PROLOGUE(mpn_addmul_1) - cmpult r18, 8, r1 - beq r1, $Large - - 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, $Lend0b 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, $Lend0a C jump if size was == 2 - - ALIGN(8) -$Loop0: 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, $Loop0 -$Lend0a: - 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 -$Lend0b: - addq r5, r3, r3 - cmpult r3, r5, r5 - stq r3, 0(r16) - addq r0, r5, r0 - ret r31, (r26), 1 - -$Large: - lda $30, -240($30) - stq $9, 8($30) - stq $10, 16($30) - stq $11, 24($30) - stq $12, 32($30) - stq $13, 40($30) - stq $14, 48($30) - stq $15, 56($30) - - and r18, 7, r20 C count for the first loop, 0-7 - srl r18, 3, r18 C count for unrolled loop - bis r31, r31, r0 - beq r20, $Lunroll - ldq r2, 0(r17) C r2 = s1_limb - addq r17, 8, r17 C s1_ptr++ - subq r20, 1, r20 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 r20, $Lend1b C jump if size was == 1 - ldq r2, 0(r17) C r2 = s1_limb - addq r17, 8, r17 C s1_ptr++ - subq r20, 1, r20 C size-- - addq r5, r3, r3 - cmpult r3, r5, r4 - stq r3, 0(r16) - addq r16, 8, r16 C res_ptr++ - beq r20, $Lend1a C jump if size was == 2 - - ALIGN(8) -$Loop1: 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 r20, 1, r20 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 r20, $Loop1 - -$Lend1a: - 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 r16, 8, r16 C res_ptr++ - addq r5, r0, r0 C combine carries - addq r4, r0, r0 C cy_limb = prod_high + cy - br r31, $Lunroll -$Lend1b: - addq r5, r3, r3 - cmpult r3, r5, r5 - stq r3, 0(r16) - addq r16, 8, r16 C res_ptr++ - addq r0, r5, r0 - -$Lunroll: - lda r17, -16(r17) C L1 bookkeeping - lda r16, -16(r16) C L1 bookkeeping - bis r0, r31, r12 - -C ____ UNROLLED LOOP SOFTWARE PIPELINE STARTUP ____ - - ldq r2, 16(r17) C L1 - ldq r3, 24(r17) C L1 - lda r18, -1(r18) C L1 bookkeeping - ldq r6, 16(r16) C L1 - ldq r7, 24(r16) C L1 - ldq r0, 32(r17) C L1 - mulq r19, r2, r13 C U1 - ldq r1, 40(r17) C L1 - umulh r19, r2, r14 C U1 - mulq r19, r3, r15 C U1 - lda r17, 64(r17) C L1 bookkeeping - ldq r4, 32(r16) C L1 - ldq r5, 40(r16) C L1 - umulh r19, r3, r8 C U1 - ldq r2, -16(r17) C L1 - mulq r19, r0, r9 C U1 - ldq r3, -8(r17) C L1 - umulh r19, r0, r10 C U1 - addq r6, r13, r6 C L0 lo + acc - mulq r19, r1, r11 C U1 - cmpult r6, r13, r20 C L0 lo add => carry - lda r16, 64(r16) C L1 bookkeeping - addq r6, r12, r22 C U0 hi add => answer - cmpult r22, r12, r21 C L0 hi add => carry - addq r14, r20, r14 C U0 hi mul + carry - ldq r6, -16(r16) C L1 - addq r7, r15, r23 C L0 lo + acc - addq r14, r21, r14 C U0 hi mul + carry - ldq r7, -8(r16) C L1 - umulh r19, r1, r12 C U1 - cmpult r23, r15, r20 C L0 lo add => carry - addq r23, r14, r23 C U0 hi add => answer - ldq r0, 0(r17) C L1 - mulq r19, r2, r13 C U1 - cmpult r23, r14, r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - ldq r1, 8(r17) C L1 - umulh r19, r2, r14 C U1 - addq r4, r9, r4 C L0 lo + acc - stq r22, -48(r16) C L0 - stq r23, -40(r16) C L1 - mulq r19, r3, r15 C U1 - addq r8, r21, r8 C U0 hi mul + carry - cmpult r4, r9, r20 C L0 lo add => carry - addq r4, r8, r22 C U0 hi add => answer - ble r18, $Lend C U1 bookkeeping - -C ____ MAIN UNROLLED LOOP ____ - ALIGN(16) -$Loop: - bis r31, r31, r31 C U1 mt - cmpult r22, r8, r21 C L0 hi add => carry - addq r10, r20, r10 C U0 hi mul + carry - ldq r4, 0(r16) C L1 - - bis r31, r31, r31 C U1 mt - addq r5, r11, r23 C L0 lo + acc - addq r10, r21, r10 C L0 hi mul + carry - ldq r5, 8(r16) C L1 - - umulh r19, r3, r8 C U1 - cmpult r23, r11, r20 C L0 lo add => carry - addq r23, r10, r23 C U0 hi add => answer - ldq r2, 16(r17) C L1 - - mulq r19, r0, r9 C U1 - cmpult r23, r10, r21 C L0 hi add => carry - addq r12, r20, r12 C U0 hi mul + carry - ldq r3, 24(r17) C L1 - - umulh r19, r0, r10 C U1 - addq r6, r13, r6 C L0 lo + acc - stq r22, -32(r16) C L0 - stq r23, -24(r16) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq r19, r1, r11 C U1 - bis r31, r31, r31 C L1 st slosh - addq r12, r21, r12 C U0 hi mul + carry - - cmpult r6, r13, r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda r18, -1(r18) C L1 bookkeeping - addq r6, r12, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - cmpult r22, r12, r21 C L0 hi add => carry - addq r14, r20, r14 C U0 hi mul + carry - ldq r6, 16(r16) C L1 - - bis r31, r31, r31 C U1 mt - addq r7, r15, r23 C L0 lo + acc - addq r14, r21, r14 C U0 hi mul + carry - ldq r7, 24(r16) C L1 - - umulh r19, r1, r12 C U1 - cmpult r23, r15, r20 C L0 lo add => carry - addq r23, r14, r23 C U0 hi add => answer - ldq r0, 32(r17) C L1 - - mulq r19, r2, r13 C U1 - cmpult r23, r14, r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - ldq r1, 40(r17) C L1 - - umulh r19, r2, r14 C U1 - addq r4, r9, r4 C U0 lo + acc - stq r22, -16(r16) C L0 - stq r23, -8(r16) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq r19, r3, r15 C U1 - bis r31, r31, r31 C L1 st slosh - addq r8, r21, r8 C L0 hi mul + carry - - cmpult r4, r9, r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda r17, 64(r17) C L1 bookkeeping - addq r4, r8, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - cmpult r22, r8, r21 C L0 hi add => carry - addq r10, r20, r10 C U0 hi mul + carry - ldq r4, 32(r16) C L1 - - bis r31, r31, r31 C U1 mt - addq r5, r11, r23 C L0 lo + acc - addq r10, r21, r10 C L0 hi mul + carry - ldq r5, 40(r16) C L1 - - umulh r19, r3, r8 C U1 - cmpult r23, r11, r20 C L0 lo add => carry - addq r23, r10, r23 C U0 hi add => answer - ldq r2, -16(r17) C L1 - - mulq r19, r0, r9 C U1 - cmpult r23, r10, r21 C L0 hi add => carry - addq r12, r20, r12 C U0 hi mul + carry - ldq r3, -8(r17) C L1 - - umulh r19, r0, r10 C U1 - addq r6, r13, r6 C L0 lo + acc - stq r22, 0(r16) C L0 - stq r23, 8(r16) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq r19, r1, r11 C U1 - bis r31, r31, r31 C L1 st slosh - addq r12, r21, r12 C U0 hi mul + carry - - cmpult r6, r13, r20 C L0 lo add => carry - bis r31, r31, r31 C U1 mt - lda r16, 64(r16) C L1 bookkeeping - addq r6, r12, r22 C U0 hi add => answer - - bis r31, r31, r31 C U1 mt - cmpult r22, r12, r21 C L0 hi add => carry - addq r14, r20, r14 C U0 hi mul + carry - ldq r6, -16(r16) C L1 - - bis r31, r31, r31 C U1 mt - addq r7, r15, r23 C L0 lo + acc - addq r14, r21, r14 C U0 hi mul + carry - ldq r7, -8(r16) C L1 - - umulh r19, r1, r12 C U1 - cmpult r23, r15, r20 C L0 lo add => carry - addq r23, r14, r23 C U0 hi add => answer - ldq r0, 0(r17) C L1 - - mulq r19, r2, r13 C U1 - cmpult r23, r14, r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - ldq r1, 8(r17) C L1 - - umulh r19, r2, r14 C U1 - addq r4, r9, r4 C L0 lo + acc - stq r22, -48(r16) C L0 - stq r23, -40(r16) C L1 - - bis r31, r31, r31 C L0 st slosh - mulq r19, r3, r15 C U1 - bis r31, r31, r31 C L1 st slosh - addq r8, r21, r8 C U0 hi mul + carry - - cmpult r4, r9, r20 C L0 lo add => carry - addq r4, r8, r22 C U0 hi add => answer - bis r31, r31, r31 C L1 mt - bgt r18, $Loop C U1 bookkeeping - -C ____ UNROLLED LOOP SOFTWARE PIPELINE FINISH ____ -$Lend: - cmpult r22, r8, r21 C L0 hi add => carry - addq r10, r20, r10 C U0 hi mul + carry - ldq r4, 0(r16) C L1 - addq r5, r11, r23 C L0 lo + acc - addq r10, r21, r10 C L0 hi mul + carry - ldq r5, 8(r16) C L1 - umulh r19, r3, r8 C U1 - cmpult r23, r11, r20 C L0 lo add => carry - addq r23, r10, r23 C U0 hi add => answer - mulq r19, r0, r9 C U1 - cmpult r23, r10, r21 C L0 hi add => carry - addq r12, r20, r12 C U0 hi mul + carry - umulh r19, r0, r10 C U1 - addq r6, r13, r6 C L0 lo + acc - stq r22, -32(r16) C L0 - stq r23, -24(r16) C L1 - mulq r19, r1, r11 C U1 - addq r12, r21, r12 C U0 hi mul + carry - cmpult r6, r13, r20 C L0 lo add => carry - addq r6, r12, r22 C U0 hi add => answer - cmpult r22, r12, r21 C L0 hi add => carry - addq r14, r20, r14 C U0 hi mul + carry - addq r7, r15, r23 C L0 lo + acc - addq r14, r21, r14 C U0 hi mul + carry - umulh r19, r1, r12 C U1 - cmpult r23, r15, r20 C L0 lo add => carry - addq r23, r14, r23 C U0 hi add => answer - cmpult r23, r14, r21 C L0 hi add => carry - addq r8, r20, r8 C U0 hi mul + carry - addq r4, r9, r4 C U0 lo + acc - stq r22, -16(r16) C L0 - stq r23, -8(r16) C L1 - bis r31, r31, r31 C L0 st slosh - addq r8, r21, r8 C L0 hi mul + carry - cmpult r4, r9, r20 C L0 lo add => carry - addq r4, r8, r22 C U0 hi add => answer - cmpult r22, r8, r21 C L0 hi add => carry - addq r10, r20, r10 C U0 hi mul + carry - addq r5, r11, r23 C L0 lo + acc - addq r10, r21, r10 C L0 hi mul + carry - cmpult r23, r11, r20 C L0 lo add => carry - addq r23, r10, r23 C U0 hi add => answer - cmpult r23, r10, r21 C L0 hi add => carry - addq r12, r20, r12 C U0 hi mul + carry - stq r22, 0(r16) C L0 - stq r23, 8(r16) C L1 - addq r12, r21, r0 C U0 hi mul + carry - - ldq $9, 8($30) - ldq $10, 16($30) - ldq $11, 24($30) - ldq $12, 32($30) - ldq $13, 40($30) - ldq $14, 48($30) - ldq $15, 56($30) - lda $30, 240($30) - ret r31, (r26), 1 -EPILOGUE(mpn_addmul_1) -ASM_END() diff --git a/rts/gmp/mpn/alpha/ev6/gmp-mparam.h b/rts/gmp/mpn/alpha/ev6/gmp-mparam.h deleted file mode 100644 index 7ea2057..0000000 --- a/rts/gmp/mpn/alpha/ev6/gmp-mparam.h +++ /dev/null @@ -1,62 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* Generated by tuneup.c, 2000-08-02. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 47 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 70 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 94 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 101 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 33 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 70 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 29 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 46 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 33 -#endif diff --git a/rts/gmp/mpn/alpha/gmp-mparam.h b/rts/gmp/mpn/alpha/gmp-mparam.h deleted file mode 100644 index 054ff2f..0000000 --- a/rts/gmp/mpn/alpha/gmp-mparam.h +++ /dev/null @@ -1,64 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values are for the 21164 family. The 21264 will require - different values, since it has such quick multiplication. */ -/* Generated by tuneup.c, 2000-07-19. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 22 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 53 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 31 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 47 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 64 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 98 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 17 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 4 -#endif diff --git a/rts/gmp/mpn/alpha/invert_limb.asm b/rts/gmp/mpn/alpha/invert_limb.asm deleted file mode 100644 index a921b32..0000000 --- a/rts/gmp/mpn/alpha/invert_limb.asm +++ /dev/null @@ -1,345 +0,0 @@ -dnl Alpha mpn_invert_limb -- Invert a normalized limb. - -dnl Copyright (C) 1996, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -dnl -dnl This is based on sophie:/gmp-stuff/dbg-inv-limb.c. -dnl The ideas are due to Peter L. Montgomery -dnl -dnl The table below uses 4096 bytes. The file mentioned above has an -dnl alternative function that doesn't require the table, but it runs 50% -dnl slower than this. - -include(`../config.m4') - -ASM_START() - -FLOAT64($C36,9223372036854775808.0) C 2^63 - -PROLOGUE_GP(mpn_invert_limb) - lda r30,-16(r30) - addq r16,r16,r1 - bne r1,$73 - lda r0,-1 - br r31,$Lend -$73: - srl r16,1,r1 - stq r1,0(r30) - ldt f11,0(r30) - cvtqt f11,f1 - lda r1,$C36 - ldt f10,0(r1) - divt f10,f1,f10 - lda r2,$invtab-4096 - srl r16,52,r1 - addq r1,r1,r1 - addq r1,r2,r1 - bic r1,6,r2 - ldq r2,0(r2) - bic r1,1,r1 - extwl r2,r1,r2 - sll r2,48,r0 - umulh r16,r0,r1 - addq r16,r1,r3 - stq r3,0(r30) - ldt f11,0(r30) - cvtqt f11,f1 - mult f1,f10,f1 - cvttqc f1,f1 - stt f1,0(r30) - ldq r4,0(r30) - subq r0,r4,r0 - umulh r16,r0,r1 - mulq r16,r0,r2 - addq r16,r1,r3 - bge r3,$Loop2 -$Loop1: addq r2,r16,r2 - cmpult r2,r16,r1 - addq r3,r1,r3 - addq r0,1,r0 - blt r3,$Loop1 -$Loop2: cmpult r2,r16,r1 - subq r0,1,r0 - subq r3,r1,r3 - subq r2,r16,r2 - bge r3,$Loop2 -$Lend: - lda r30,16(r30) - ret r31,(r26),1 -EPILOGUE(mpn_invert_limb) -DATASTART(`$invtab',4) - .word 0xffff,0xffc0,0xff80,0xff40,0xff00,0xfec0,0xfe81,0xfe41 - .word 0xfe01,0xfdc2,0xfd83,0xfd43,0xfd04,0xfcc5,0xfc86,0xfc46 - .word 0xfc07,0xfbc8,0xfb8a,0xfb4b,0xfb0c,0xfacd,0xfa8e,0xfa50 - .word 0xfa11,0xf9d3,0xf994,0xf956,0xf918,0xf8d9,0xf89b,0xf85d - .word 0xf81f,0xf7e1,0xf7a3,0xf765,0xf727,0xf6ea,0xf6ac,0xf66e - .word 0xf631,0xf5f3,0xf5b6,0xf578,0xf53b,0xf4fd,0xf4c0,0xf483 - .word 0xf446,0xf409,0xf3cc,0xf38f,0xf352,0xf315,0xf2d8,0xf29c - .word 0xf25f,0xf222,0xf1e6,0xf1a9,0xf16d,0xf130,0xf0f4,0xf0b8 - .word 0xf07c,0xf03f,0xf003,0xefc7,0xef8b,0xef4f,0xef14,0xeed8 - .word 0xee9c,0xee60,0xee25,0xede9,0xedae,0xed72,0xed37,0xecfb - .word 0xecc0,0xec85,0xec4a,0xec0e,0xebd3,0xeb98,0xeb5d,0xeb22 - .word 0xeae8,0xeaad,0xea72,0xea37,0xe9fd,0xe9c2,0xe988,0xe94d - .word 0xe913,0xe8d8,0xe89e,0xe864,0xe829,0xe7ef,0xe7b5,0xe77b - .word 0xe741,0xe707,0xe6cd,0xe694,0xe65a,0xe620,0xe5e6,0xe5ad - .word 0xe573,0xe53a,0xe500,0xe4c7,0xe48d,0xe454,0xe41b,0xe3e2 - .word 0xe3a9,0xe370,0xe336,0xe2fd,0xe2c5,0xe28c,0xe253,0xe21a - .word 0xe1e1,0xe1a9,0xe170,0xe138,0xe0ff,0xe0c7,0xe08e,0xe056 - .word 0xe01e,0xdfe5,0xdfad,0xdf75,0xdf3d,0xdf05,0xdecd,0xde95 - .word 0xde5d,0xde25,0xdded,0xddb6,0xdd7e,0xdd46,0xdd0f,0xdcd7 - .word 0xdca0,0xdc68,0xdc31,0xdbf9,0xdbc2,0xdb8b,0xdb54,0xdb1d - .word 0xdae6,0xdaae,0xda78,0xda41,0xda0a,0xd9d3,0xd99c,0xd965 - .word 0xd92f,0xd8f8,0xd8c1,0xd88b,0xd854,0xd81e,0xd7e8,0xd7b1 - .word 0xd77b,0xd745,0xd70e,0xd6d8,0xd6a2,0xd66c,0xd636,0xd600 - .word 0xd5ca,0xd594,0xd55f,0xd529,0xd4f3,0xd4bd,0xd488,0xd452 - .word 0xd41d,0xd3e7,0xd3b2,0xd37c,0xd347,0xd312,0xd2dd,0xd2a7 - .word 0xd272,0xd23d,0xd208,0xd1d3,0xd19e,0xd169,0xd134,0xd100 - .word 0xd0cb,0xd096,0xd061,0xd02d,0xcff8,0xcfc4,0xcf8f,0xcf5b - .word 0xcf26,0xcef2,0xcebe,0xce89,0xce55,0xce21,0xcded,0xcdb9 - .word 0xcd85,0xcd51,0xcd1d,0xcce9,0xccb5,0xcc81,0xcc4e,0xcc1a - .word 0xcbe6,0xcbb3,0xcb7f,0xcb4c,0xcb18,0xcae5,0xcab1,0xca7e - .word 0xca4b,0xca17,0xc9e4,0xc9b1,0xc97e,0xc94b,0xc918,0xc8e5 - .word 0xc8b2,0xc87f,0xc84c,0xc819,0xc7e7,0xc7b4,0xc781,0xc74f - .word 0xc71c,0xc6e9,0xc6b7,0xc684,0xc652,0xc620,0xc5ed,0xc5bb - .word 0xc589,0xc557,0xc524,0xc4f2,0xc4c0,0xc48e,0xc45c,0xc42a - .word 0xc3f8,0xc3c7,0xc395,0xc363,0xc331,0xc300,0xc2ce,0xc29c - .word 0xc26b,0xc239,0xc208,0xc1d6,0xc1a5,0xc174,0xc142,0xc111 - .word 0xc0e0,0xc0af,0xc07e,0xc04d,0xc01c,0xbfeb,0xbfba,0xbf89 - .word 0xbf58,0xbf27,0xbef6,0xbec5,0xbe95,0xbe64,0xbe33,0xbe03 - .word 0xbdd2,0xbda2,0xbd71,0xbd41,0xbd10,0xbce0,0xbcb0,0xbc80 - .word 0xbc4f,0xbc1f,0xbbef,0xbbbf,0xbb8f,0xbb5f,0xbb2f,0xbaff - .word 0xbacf,0xba9f,0xba6f,0xba40,0xba10,0xb9e0,0xb9b1,0xb981 - .word 0xb951,0xb922,0xb8f2,0xb8c3,0xb894,0xb864,0xb835,0xb806 - .word 0xb7d6,0xb7a7,0xb778,0xb749,0xb71a,0xb6eb,0xb6bc,0xb68d - .word 0xb65e,0xb62f,0xb600,0xb5d1,0xb5a2,0xb574,0xb545,0xb516 - .word 0xb4e8,0xb4b9,0xb48a,0xb45c,0xb42e,0xb3ff,0xb3d1,0xb3a2 - .word 0xb374,0xb346,0xb318,0xb2e9,0xb2bb,0xb28d,0xb25f,0xb231 - .word 0xb203,0xb1d5,0xb1a7,0xb179,0xb14b,0xb11d,0xb0f0,0xb0c2 - .word 0xb094,0xb067,0xb039,0xb00b,0xafde,0xafb0,0xaf83,0xaf55 - .word 0xaf28,0xaefb,0xaecd,0xaea0,0xae73,0xae45,0xae18,0xadeb - .word 0xadbe,0xad91,0xad64,0xad37,0xad0a,0xacdd,0xacb0,0xac83 - .word 0xac57,0xac2a,0xabfd,0xabd0,0xaba4,0xab77,0xab4a,0xab1e - .word 0xaaf1,0xaac5,0xaa98,0xaa6c,0xaa40,0xaa13,0xa9e7,0xa9bb - .word 0xa98e,0xa962,0xa936,0xa90a,0xa8de,0xa8b2,0xa886,0xa85a - .word 0xa82e,0xa802,0xa7d6,0xa7aa,0xa77e,0xa753,0xa727,0xa6fb - .word 0xa6d0,0xa6a4,0xa678,0xa64d,0xa621,0xa5f6,0xa5ca,0xa59f - .word 0xa574,0xa548,0xa51d,0xa4f2,0xa4c6,0xa49b,0xa470,0xa445 - .word 0xa41a,0xa3ef,0xa3c4,0xa399,0xa36e,0xa343,0xa318,0xa2ed - .word 0xa2c2,0xa297,0xa26d,0xa242,0xa217,0xa1ed,0xa1c2,0xa197 - .word 0xa16d,0xa142,0xa118,0xa0ed,0xa0c3,0xa098,0xa06e,0xa044 - .word 0xa01a,0x9fef,0x9fc5,0x9f9b,0x9f71,0x9f47,0x9f1c,0x9ef2 - .word 0x9ec8,0x9e9e,0x9e74,0x9e4b,0x9e21,0x9df7,0x9dcd,0x9da3 - .word 0x9d79,0x9d50,0x9d26,0x9cfc,0x9cd3,0x9ca9,0x9c80,0x9c56 - .word 0x9c2d,0x9c03,0x9bda,0x9bb0,0x9b87,0x9b5e,0x9b34,0x9b0b - .word 0x9ae2,0x9ab9,0x9a8f,0x9a66,0x9a3d,0x9a14,0x99eb,0x99c2 - .word 0x9999,0x9970,0x9947,0x991e,0x98f6,0x98cd,0x98a4,0x987b - .word 0x9852,0x982a,0x9801,0x97d8,0x97b0,0x9787,0x975f,0x9736 - .word 0x970e,0x96e5,0x96bd,0x9695,0x966c,0x9644,0x961c,0x95f3 - .word 0x95cb,0x95a3,0x957b,0x9553,0x952b,0x9503,0x94db,0x94b3 - .word 0x948b,0x9463,0x943b,0x9413,0x93eb,0x93c3,0x939b,0x9374 - .word 0x934c,0x9324,0x92fd,0x92d5,0x92ad,0x9286,0x925e,0x9237 - .word 0x920f,0x91e8,0x91c0,0x9199,0x9172,0x914a,0x9123,0x90fc - .word 0x90d4,0x90ad,0x9086,0x905f,0x9038,0x9011,0x8fea,0x8fc3 - .word 0x8f9c,0x8f75,0x8f4e,0x8f27,0x8f00,0x8ed9,0x8eb2,0x8e8b - .word 0x8e65,0x8e3e,0x8e17,0x8df1,0x8dca,0x8da3,0x8d7d,0x8d56 - .word 0x8d30,0x8d09,0x8ce3,0x8cbc,0x8c96,0x8c6f,0x8c49,0x8c23 - .word 0x8bfc,0x8bd6,0x8bb0,0x8b8a,0x8b64,0x8b3d,0x8b17,0x8af1 - .word 0x8acb,0x8aa5,0x8a7f,0x8a59,0x8a33,0x8a0d,0x89e7,0x89c1 - .word 0x899c,0x8976,0x8950,0x892a,0x8904,0x88df,0x88b9,0x8893 - .word 0x886e,0x8848,0x8823,0x87fd,0x87d8,0x87b2,0x878d,0x8767 - .word 0x8742,0x871d,0x86f7,0x86d2,0x86ad,0x8687,0x8662,0x863d - .word 0x8618,0x85f3,0x85ce,0x85a9,0x8583,0x855e,0x8539,0x8514 - .word 0x84f0,0x84cb,0x84a6,0x8481,0x845c,0x8437,0x8412,0x83ee - .word 0x83c9,0x83a4,0x8380,0x835b,0x8336,0x8312,0x82ed,0x82c9 - .word 0x82a4,0x8280,0x825b,0x8237,0x8212,0x81ee,0x81ca,0x81a5 - .word 0x8181,0x815d,0x8138,0x8114,0x80f0,0x80cc,0x80a8,0x8084 - .word 0x8060,0x803c,0x8018,0x7ff4,0x7fd0,0x7fac,0x7f88,0x7f64 - .word 0x7f40,0x7f1c,0x7ef8,0x7ed4,0x7eb1,0x7e8d,0x7e69,0x7e45 - .word 0x7e22,0x7dfe,0x7ddb,0x7db7,0x7d93,0x7d70,0x7d4c,0x7d29 - .word 0x7d05,0x7ce2,0x7cbf,0x7c9b,0x7c78,0x7c55,0x7c31,0x7c0e - .word 0x7beb,0x7bc7,0x7ba4,0x7b81,0x7b5e,0x7b3b,0x7b18,0x7af5 - .word 0x7ad2,0x7aaf,0x7a8c,0x7a69,0x7a46,0x7a23,0x7a00,0x79dd - .word 0x79ba,0x7997,0x7975,0x7952,0x792f,0x790c,0x78ea,0x78c7 - .word 0x78a4,0x7882,0x785f,0x783c,0x781a,0x77f7,0x77d5,0x77b2 - .word 0x7790,0x776e,0x774b,0x7729,0x7706,0x76e4,0x76c2,0x76a0 - .word 0x767d,0x765b,0x7639,0x7617,0x75f5,0x75d2,0x75b0,0x758e - .word 0x756c,0x754a,0x7528,0x7506,0x74e4,0x74c2,0x74a0,0x747e - .word 0x745d,0x743b,0x7419,0x73f7,0x73d5,0x73b4,0x7392,0x7370 - .word 0x734f,0x732d,0x730b,0x72ea,0x72c8,0x72a7,0x7285,0x7264 - .word 0x7242,0x7221,0x71ff,0x71de,0x71bc,0x719b,0x717a,0x7158 - .word 0x7137,0x7116,0x70f5,0x70d3,0x70b2,0x7091,0x7070,0x704f - .word 0x702e,0x700c,0x6feb,0x6fca,0x6fa9,0x6f88,0x6f67,0x6f46 - .word 0x6f26,0x6f05,0x6ee4,0x6ec3,0x6ea2,0x6e81,0x6e60,0x6e40 - .word 0x6e1f,0x6dfe,0x6dde,0x6dbd,0x6d9c,0x6d7c,0x6d5b,0x6d3a - .word 0x6d1a,0x6cf9,0x6cd9,0x6cb8,0x6c98,0x6c77,0x6c57,0x6c37 - .word 0x6c16,0x6bf6,0x6bd6,0x6bb5,0x6b95,0x6b75,0x6b54,0x6b34 - .word 0x6b14,0x6af4,0x6ad4,0x6ab4,0x6a94,0x6a73,0x6a53,0x6a33 - .word 0x6a13,0x69f3,0x69d3,0x69b3,0x6993,0x6974,0x6954,0x6934 - .word 0x6914,0x68f4,0x68d4,0x68b5,0x6895,0x6875,0x6855,0x6836 - .word 0x6816,0x67f6,0x67d7,0x67b7,0x6798,0x6778,0x6758,0x6739 - .word 0x6719,0x66fa,0x66db,0x66bb,0x669c,0x667c,0x665d,0x663e - .word 0x661e,0x65ff,0x65e0,0x65c0,0x65a1,0x6582,0x6563,0x6544 - .word 0x6524,0x6505,0x64e6,0x64c7,0x64a8,0x6489,0x646a,0x644b - .word 0x642c,0x640d,0x63ee,0x63cf,0x63b0,0x6391,0x6373,0x6354 - .word 0x6335,0x6316,0x62f7,0x62d9,0x62ba,0x629b,0x627c,0x625e - .word 0x623f,0x6221,0x6202,0x61e3,0x61c5,0x61a6,0x6188,0x6169 - .word 0x614b,0x612c,0x610e,0x60ef,0x60d1,0x60b3,0x6094,0x6076 - .word 0x6058,0x6039,0x601b,0x5ffd,0x5fdf,0x5fc0,0x5fa2,0x5f84 - .word 0x5f66,0x5f48,0x5f2a,0x5f0b,0x5eed,0x5ecf,0x5eb1,0x5e93 - .word 0x5e75,0x5e57,0x5e39,0x5e1b,0x5dfd,0x5de0,0x5dc2,0x5da4 - .word 0x5d86,0x5d68,0x5d4a,0x5d2d,0x5d0f,0x5cf1,0x5cd3,0x5cb6 - .word 0x5c98,0x5c7a,0x5c5d,0x5c3f,0x5c21,0x5c04,0x5be6,0x5bc9 - .word 0x5bab,0x5b8e,0x5b70,0x5b53,0x5b35,0x5b18,0x5afb,0x5add - .word 0x5ac0,0x5aa2,0x5a85,0x5a68,0x5a4b,0x5a2d,0x5a10,0x59f3 - .word 0x59d6,0x59b8,0x599b,0x597e,0x5961,0x5944,0x5927,0x590a - .word 0x58ed,0x58d0,0x58b3,0x5896,0x5879,0x585c,0x583f,0x5822 - .word 0x5805,0x57e8,0x57cb,0x57ae,0x5791,0x5775,0x5758,0x573b - .word 0x571e,0x5702,0x56e5,0x56c8,0x56ac,0x568f,0x5672,0x5656 - .word 0x5639,0x561c,0x5600,0x55e3,0x55c7,0x55aa,0x558e,0x5571 - .word 0x5555,0x5538,0x551c,0x5500,0x54e3,0x54c7,0x54aa,0x548e - .word 0x5472,0x5456,0x5439,0x541d,0x5401,0x53e5,0x53c8,0x53ac - .word 0x5390,0x5374,0x5358,0x533c,0x5320,0x5304,0x52e8,0x52cb - .word 0x52af,0x5293,0x5277,0x525c,0x5240,0x5224,0x5208,0x51ec - .word 0x51d0,0x51b4,0x5198,0x517c,0x5161,0x5145,0x5129,0x510d - .word 0x50f2,0x50d6,0x50ba,0x509f,0x5083,0x5067,0x504c,0x5030 - .word 0x5015,0x4ff9,0x4fdd,0x4fc2,0x4fa6,0x4f8b,0x4f6f,0x4f54 - .word 0x4f38,0x4f1d,0x4f02,0x4ee6,0x4ecb,0x4eb0,0x4e94,0x4e79 - .word 0x4e5e,0x4e42,0x4e27,0x4e0c,0x4df0,0x4dd5,0x4dba,0x4d9f - .word 0x4d84,0x4d69,0x4d4d,0x4d32,0x4d17,0x4cfc,0x4ce1,0x4cc6 - .word 0x4cab,0x4c90,0x4c75,0x4c5a,0x4c3f,0x4c24,0x4c09,0x4bee - .word 0x4bd3,0x4bb9,0x4b9e,0x4b83,0x4b68,0x4b4d,0x4b32,0x4b18 - .word 0x4afd,0x4ae2,0x4ac7,0x4aad,0x4a92,0x4a77,0x4a5d,0x4a42 - .word 0x4a27,0x4a0d,0x49f2,0x49d8,0x49bd,0x49a3,0x4988,0x496e - .word 0x4953,0x4939,0x491e,0x4904,0x48e9,0x48cf,0x48b5,0x489a - .word 0x4880,0x4865,0x484b,0x4831,0x4817,0x47fc,0x47e2,0x47c8 - .word 0x47ae,0x4793,0x4779,0x475f,0x4745,0x472b,0x4711,0x46f6 - .word 0x46dc,0x46c2,0x46a8,0x468e,0x4674,0x465a,0x4640,0x4626 - .word 0x460c,0x45f2,0x45d8,0x45be,0x45a5,0x458b,0x4571,0x4557 - .word 0x453d,0x4523,0x4509,0x44f0,0x44d6,0x44bc,0x44a2,0x4489 - .word 0x446f,0x4455,0x443c,0x4422,0x4408,0x43ef,0x43d5,0x43bc - .word 0x43a2,0x4388,0x436f,0x4355,0x433c,0x4322,0x4309,0x42ef - .word 0x42d6,0x42bc,0x42a3,0x428a,0x4270,0x4257,0x423d,0x4224 - .word 0x420b,0x41f2,0x41d8,0x41bf,0x41a6,0x418c,0x4173,0x415a - .word 0x4141,0x4128,0x410e,0x40f5,0x40dc,0x40c3,0x40aa,0x4091 - .word 0x4078,0x405f,0x4046,0x402d,0x4014,0x3ffb,0x3fe2,0x3fc9 - .word 0x3fb0,0x3f97,0x3f7e,0x3f65,0x3f4c,0x3f33,0x3f1a,0x3f01 - .word 0x3ee8,0x3ed0,0x3eb7,0x3e9e,0x3e85,0x3e6c,0x3e54,0x3e3b - .word 0x3e22,0x3e0a,0x3df1,0x3dd8,0x3dc0,0x3da7,0x3d8e,0x3d76 - .word 0x3d5d,0x3d45,0x3d2c,0x3d13,0x3cfb,0x3ce2,0x3cca,0x3cb1 - .word 0x3c99,0x3c80,0x3c68,0x3c50,0x3c37,0x3c1f,0x3c06,0x3bee - .word 0x3bd6,0x3bbd,0x3ba5,0x3b8d,0x3b74,0x3b5c,0x3b44,0x3b2b - .word 0x3b13,0x3afb,0x3ae3,0x3acb,0x3ab2,0x3a9a,0x3a82,0x3a6a - .word 0x3a52,0x3a3a,0x3a22,0x3a09,0x39f1,0x39d9,0x39c1,0x39a9 - .word 0x3991,0x3979,0x3961,0x3949,0x3931,0x3919,0x3901,0x38ea - .word 0x38d2,0x38ba,0x38a2,0x388a,0x3872,0x385a,0x3843,0x382b - .word 0x3813,0x37fb,0x37e3,0x37cc,0x37b4,0x379c,0x3785,0x376d - .word 0x3755,0x373e,0x3726,0x370e,0x36f7,0x36df,0x36c8,0x36b0 - .word 0x3698,0x3681,0x3669,0x3652,0x363a,0x3623,0x360b,0x35f4 - .word 0x35dc,0x35c5,0x35ae,0x3596,0x357f,0x3567,0x3550,0x3539 - .word 0x3521,0x350a,0x34f3,0x34db,0x34c4,0x34ad,0x3496,0x347e - .word 0x3467,0x3450,0x3439,0x3422,0x340a,0x33f3,0x33dc,0x33c5 - .word 0x33ae,0x3397,0x3380,0x3368,0x3351,0x333a,0x3323,0x330c - .word 0x32f5,0x32de,0x32c7,0x32b0,0x3299,0x3282,0x326c,0x3255 - .word 0x323e,0x3227,0x3210,0x31f9,0x31e2,0x31cb,0x31b5,0x319e - .word 0x3187,0x3170,0x3159,0x3143,0x312c,0x3115,0x30fe,0x30e8 - .word 0x30d1,0x30ba,0x30a4,0x308d,0x3076,0x3060,0x3049,0x3033 - .word 0x301c,0x3005,0x2fef,0x2fd8,0x2fc2,0x2fab,0x2f95,0x2f7e - .word 0x2f68,0x2f51,0x2f3b,0x2f24,0x2f0e,0x2ef8,0x2ee1,0x2ecb - .word 0x2eb4,0x2e9e,0x2e88,0x2e71,0x2e5b,0x2e45,0x2e2e,0x2e18 - .word 0x2e02,0x2dec,0x2dd5,0x2dbf,0x2da9,0x2d93,0x2d7c,0x2d66 - .word 0x2d50,0x2d3a,0x2d24,0x2d0e,0x2cf8,0x2ce1,0x2ccb,0x2cb5 - .word 0x2c9f,0x2c89,0x2c73,0x2c5d,0x2c47,0x2c31,0x2c1b,0x2c05 - .word 0x2bef,0x2bd9,0x2bc3,0x2bad,0x2b97,0x2b81,0x2b6c,0x2b56 - .word 0x2b40,0x2b2a,0x2b14,0x2afe,0x2ae8,0x2ad3,0x2abd,0x2aa7 - .word 0x2a91,0x2a7c,0x2a66,0x2a50,0x2a3a,0x2a25,0x2a0f,0x29f9 - .word 0x29e4,0x29ce,0x29b8,0x29a3,0x298d,0x2977,0x2962,0x294c - .word 0x2937,0x2921,0x290c,0x28f6,0x28e0,0x28cb,0x28b5,0x28a0 - .word 0x288b,0x2875,0x2860,0x284a,0x2835,0x281f,0x280a,0x27f5 - .word 0x27df,0x27ca,0x27b4,0x279f,0x278a,0x2774,0x275f,0x274a - .word 0x2735,0x271f,0x270a,0x26f5,0x26e0,0x26ca,0x26b5,0x26a0 - .word 0x268b,0x2676,0x2660,0x264b,0x2636,0x2621,0x260c,0x25f7 - .word 0x25e2,0x25cd,0x25b8,0x25a2,0x258d,0x2578,0x2563,0x254e - .word 0x2539,0x2524,0x250f,0x24fa,0x24e5,0x24d1,0x24bc,0x24a7 - .word 0x2492,0x247d,0x2468,0x2453,0x243e,0x2429,0x2415,0x2400 - .word 0x23eb,0x23d6,0x23c1,0x23ad,0x2398,0x2383,0x236e,0x235a - .word 0x2345,0x2330,0x231c,0x2307,0x22f2,0x22dd,0x22c9,0x22b4 - .word 0x22a0,0x228b,0x2276,0x2262,0x224d,0x2239,0x2224,0x2210 - .word 0x21fb,0x21e6,0x21d2,0x21bd,0x21a9,0x2194,0x2180,0x216c - .word 0x2157,0x2143,0x212e,0x211a,0x2105,0x20f1,0x20dd,0x20c8 - .word 0x20b4,0x20a0,0x208b,0x2077,0x2063,0x204e,0x203a,0x2026 - .word 0x2012,0x1ffd,0x1fe9,0x1fd5,0x1fc1,0x1fac,0x1f98,0x1f84 - .word 0x1f70,0x1f5c,0x1f47,0x1f33,0x1f1f,0x1f0b,0x1ef7,0x1ee3 - .word 0x1ecf,0x1ebb,0x1ea7,0x1e93,0x1e7f,0x1e6a,0x1e56,0x1e42 - .word 0x1e2e,0x1e1a,0x1e06,0x1df3,0x1ddf,0x1dcb,0x1db7,0x1da3 - .word 0x1d8f,0x1d7b,0x1d67,0x1d53,0x1d3f,0x1d2b,0x1d18,0x1d04 - .word 0x1cf0,0x1cdc,0x1cc8,0x1cb5,0x1ca1,0x1c8d,0x1c79,0x1c65 - .word 0x1c52,0x1c3e,0x1c2a,0x1c17,0x1c03,0x1bef,0x1bdb,0x1bc8 - .word 0x1bb4,0x1ba0,0x1b8d,0x1b79,0x1b66,0x1b52,0x1b3e,0x1b2b - .word 0x1b17,0x1b04,0x1af0,0x1add,0x1ac9,0x1ab6,0x1aa2,0x1a8f - .word 0x1a7b,0x1a68,0x1a54,0x1a41,0x1a2d,0x1a1a,0x1a06,0x19f3 - .word 0x19e0,0x19cc,0x19b9,0x19a5,0x1992,0x197f,0x196b,0x1958 - .word 0x1945,0x1931,0x191e,0x190b,0x18f8,0x18e4,0x18d1,0x18be - .word 0x18ab,0x1897,0x1884,0x1871,0x185e,0x184b,0x1837,0x1824 - .word 0x1811,0x17fe,0x17eb,0x17d8,0x17c4,0x17b1,0x179e,0x178b - .word 0x1778,0x1765,0x1752,0x173f,0x172c,0x1719,0x1706,0x16f3 - .word 0x16e0,0x16cd,0x16ba,0x16a7,0x1694,0x1681,0x166e,0x165b - .word 0x1648,0x1635,0x1623,0x1610,0x15fd,0x15ea,0x15d7,0x15c4 - .word 0x15b1,0x159f,0x158c,0x1579,0x1566,0x1553,0x1541,0x152e - .word 0x151b,0x1508,0x14f6,0x14e3,0x14d0,0x14bd,0x14ab,0x1498 - .word 0x1485,0x1473,0x1460,0x144d,0x143b,0x1428,0x1416,0x1403 - .word 0x13f0,0x13de,0x13cb,0x13b9,0x13a6,0x1394,0x1381,0x136f - .word 0x135c,0x1349,0x1337,0x1325,0x1312,0x1300,0x12ed,0x12db - .word 0x12c8,0x12b6,0x12a3,0x1291,0x127f,0x126c,0x125a,0x1247 - .word 0x1235,0x1223,0x1210,0x11fe,0x11ec,0x11d9,0x11c7,0x11b5 - .word 0x11a3,0x1190,0x117e,0x116c,0x1159,0x1147,0x1135,0x1123 - .word 0x1111,0x10fe,0x10ec,0x10da,0x10c8,0x10b6,0x10a4,0x1091 - .word 0x107f,0x106d,0x105b,0x1049,0x1037,0x1025,0x1013,0x1001 - .word 0x0fef,0x0fdc,0x0fca,0x0fb8,0x0fa6,0x0f94,0x0f82,0x0f70 - .word 0x0f5e,0x0f4c,0x0f3a,0x0f28,0x0f17,0x0f05,0x0ef3,0x0ee1 - .word 0x0ecf,0x0ebd,0x0eab,0x0e99,0x0e87,0x0e75,0x0e64,0x0e52 - .word 0x0e40,0x0e2e,0x0e1c,0x0e0a,0x0df9,0x0de7,0x0dd5,0x0dc3 - .word 0x0db2,0x0da0,0x0d8e,0x0d7c,0x0d6b,0x0d59,0x0d47,0x0d35 - .word 0x0d24,0x0d12,0x0d00,0x0cef,0x0cdd,0x0ccb,0x0cba,0x0ca8 - .word 0x0c97,0x0c85,0x0c73,0x0c62,0x0c50,0x0c3f,0x0c2d,0x0c1c - .word 0x0c0a,0x0bf8,0x0be7,0x0bd5,0x0bc4,0x0bb2,0x0ba1,0x0b8f - .word 0x0b7e,0x0b6c,0x0b5b,0x0b4a,0x0b38,0x0b27,0x0b15,0x0b04 - .word 0x0af2,0x0ae1,0x0ad0,0x0abe,0x0aad,0x0a9c,0x0a8a,0x0a79 - .word 0x0a68,0x0a56,0x0a45,0x0a34,0x0a22,0x0a11,0x0a00,0x09ee - .word 0x09dd,0x09cc,0x09bb,0x09a9,0x0998,0x0987,0x0976,0x0965 - .word 0x0953,0x0942,0x0931,0x0920,0x090f,0x08fe,0x08ec,0x08db - .word 0x08ca,0x08b9,0x08a8,0x0897,0x0886,0x0875,0x0864,0x0853 - .word 0x0842,0x0831,0x081f,0x080e,0x07fd,0x07ec,0x07db,0x07ca - .word 0x07b9,0x07a8,0x0798,0x0787,0x0776,0x0765,0x0754,0x0743 - .word 0x0732,0x0721,0x0710,0x06ff,0x06ee,0x06dd,0x06cd,0x06bc - .word 0x06ab,0x069a,0x0689,0x0678,0x0668,0x0657,0x0646,0x0635 - .word 0x0624,0x0614,0x0603,0x05f2,0x05e1,0x05d1,0x05c0,0x05af - .word 0x059e,0x058e,0x057d,0x056c,0x055c,0x054b,0x053a,0x052a - .word 0x0519,0x0508,0x04f8,0x04e7,0x04d6,0x04c6,0x04b5,0x04a5 - .word 0x0494,0x0484,0x0473,0x0462,0x0452,0x0441,0x0431,0x0420 - .word 0x0410,0x03ff,0x03ef,0x03de,0x03ce,0x03bd,0x03ad,0x039c - .word 0x038c,0x037b,0x036b,0x035b,0x034a,0x033a,0x0329,0x0319 - .word 0x0309,0x02f8,0x02e8,0x02d7,0x02c7,0x02b7,0x02a6,0x0296 - .word 0x0286,0x0275,0x0265,0x0255,0x0245,0x0234,0x0224,0x0214 - .word 0x0204,0x01f3,0x01e3,0x01d3,0x01c3,0x01b2,0x01a2,0x0192 - .word 0x0182,0x0172,0x0161,0x0151,0x0141,0x0131,0x0121,0x0111 - .word 0x0101,0x00f0,0x00e0,0x00d0,0x00c0,0x00b0,0x00a0,0x0090 - .word 0x0080,0x0070,0x0060,0x0050,0x0040,0x0030,0x0020,0x0010 -DATAEND() -ASM_END() diff --git a/rts/gmp/mpn/alpha/lshift.asm b/rts/gmp/mpn/alpha/lshift.asm deleted file mode 100644 index 87c46f6..0000000 --- a/rts/gmp/mpn/alpha/lshift.asm +++ /dev/null @@ -1,104 +0,0 @@ -dnl Alpha mpn_lshift -- Shift a number left. - -dnl Copyright (C) 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl cnt r19 - -dnl This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, -dnl it would take 4 cycles/limb. It should be possible to get down to 3 -dnl cycles/limb since both ldq and stq can be paired with the other used -dnl instructions. But there are many restrictions in the 21064 pipeline that -dnl makes it hard, if not impossible, to get down to 3 cycles/limb: - -dnl 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. -dnl 2. Only aligned instruction pairs can be paired. -dnl 3. The store buffer or silo might not be able to deal with the bandwidth. - -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 r17,8,r17 - subq r31,r19,r7 - s8addq r18,r16,r16 C make r16 point at end of RES - subq r18,1,r18 - and r18,4-1,r20 C number of limbs in first loop - srl r4,r7,r0 C compute function result - - beq r20,$L0 - subq r18,r20,r18 - - ALIGN(8) -$Loop0: - ldq r3,-8(r17) - subq r16,8,r16 - subq r17,8,r17 - subq r20,1,r20 - sll r4,r19,r5 - srl r3,r7,r6 - bis r3,r3,r4 - bis r5,r6,r8 - stq r8,0(r16) - bne r20,$Loop0 - -$L0: beq r18,$Lend - - ALIGN(8) -$Loop: ldq r3,-8(r17) - subq r16,32,r16 - subq r18,4,r18 - sll r4,r19,r5 - srl r3,r7,r6 - - ldq r4,-16(r17) - sll r3,r19,r1 - bis r5,r6,r8 - stq r8,24(r16) - srl r4,r7,r2 - - ldq r3,-24(r17) - sll r4,r19,r5 - bis r1,r2,r8 - stq r8,16(r16) - srl r3,r7,r6 - - ldq r4,-32(r17) - sll r3,r19,r1 - bis r5,r6,r8 - stq r8,8(r16) - srl r4,r7,r2 - - subq r17,32,r17 - bis r1,r2,r8 - stq r8,0(r16) - - bgt r18,$Loop - -$Lend: sll r4,r19,r8 - stq r8,-8(r16) - ret r31,(r26),1 -EPILOGUE(mpn_lshift) -ASM_END() diff --git a/rts/gmp/mpn/alpha/mul_1.asm b/rts/gmp/mpn/alpha/mul_1.asm deleted file mode 100644 index 46b8df3..0000000 --- a/rts/gmp/mpn/alpha/mul_1.asm +++ /dev/null @@ -1,71 +0,0 @@ -dnl Alpha __gmpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright (C) 1992, 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl s2_limb r19 - -dnl This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and 7 -dnl cycles/limb on EV6. - -ASM_START() -PROLOGUE(mpn_mul_1) - ldq r2,0(r17) C r2 = s1_limb - subq 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,$Lend1 C jump if size was == 1 - ldq r2,8(r17) C r2 = s1_limb - subq r18,1,r18 C size-- - stq r3,0(r16) - beq r18,$Lend2 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' - subq r18,1,r18 C size-- - umulh r2,r19,r4 C r4 = cy_limb - ldq r2,16(r17) C r2 = s1_limb - addq 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) - addq r16,8,r16 C res_ptr++ - bne r18,$Loop - -$Lend2: 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 -$Lend1: stq r3,0(r16) - ret r31,(r26),1 -EPILOGUE(mpn_mul_1) -ASM_END() diff --git a/rts/gmp/mpn/alpha/rshift.asm b/rts/gmp/mpn/alpha/rshift.asm deleted file mode 100644 index aa25eda..0000000 --- a/rts/gmp/mpn/alpha/rshift.asm +++ /dev/null @@ -1,102 +0,0 @@ -dnl Alpha mpn_rshift -- Shift a number right. - -dnl Copyright (C) 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl cnt r19 - -dnl This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, -dnl it would take 4 cycles/limb. It should be possible to get down to 3 -dnl cycles/limb since both ldq and stq can be paired with the other used -dnl instructions. But there are many restrictions in the 21064 pipeline that -dnl makes it hard, if not impossible, to get down to 3 cycles/limb: - -dnl 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. -dnl 2. Only aligned instruction pairs can be paired. -dnl 3. The store buffer or silo might not be able to deal with the bandwidth. - -ASM_START() -PROLOGUE(mpn_rshift) - ldq r4,0(r17) C load first limb - addq r17,8,r17 - subq r31,r19,r7 - subq r18,1,r18 - and r18,4-1,r20 C number of limbs in first loop - sll r4,r7,r0 C compute function result - - beq r20,$L0 - subq r18,r20,r18 - - ALIGN(8) -$Loop0: - ldq r3,0(r17) - addq r16,8,r16 - addq r17,8,r17 - subq r20,1,r20 - srl r4,r19,r5 - sll r3,r7,r6 - bis r3,r3,r4 - bis r5,r6,r8 - stq r8,-8(r16) - bne r20,$Loop0 - -$L0: beq r18,$Lend - - ALIGN(8) -$Loop: ldq r3,0(r17) - addq r16,32,r16 - subq r18,4,r18 - srl r4,r19,r5 - sll r3,r7,r6 - - ldq r4,8(r17) - srl r3,r19,r1 - bis r5,r6,r8 - stq r8,-32(r16) - sll r4,r7,r2 - - ldq r3,16(r17) - srl r4,r19,r5 - bis r1,r2,r8 - stq r8,-24(r16) - sll r3,r7,r6 - - ldq r4,24(r17) - srl r3,r19,r1 - bis r5,r6,r8 - stq r8,-16(r16) - sll r4,r7,r2 - - addq r17,32,r17 - bis r1,r2,r8 - stq r8,-8(r16) - - bgt r18,$Loop - -$Lend: srl r4,r19,r8 - stq r8,0(r16) - ret r31,(r26),1 -EPILOGUE(mpn_rshift) -ASM_END() diff --git a/rts/gmp/mpn/alpha/sub_n.asm b/rts/gmp/mpn/alpha/sub_n.asm deleted file mode 100644 index 718f657..0000000 --- a/rts/gmp/mpn/alpha/sub_n.asm +++ /dev/null @@ -1,114 +0,0 @@ -dnl Alpha mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -dnl store difference in a third limb vector. - -dnl Copyright (C) 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl s2_ptr r18 -dnl size r19 - -ASM_START() -PROLOGUE(mpn_sub_n) - ldq r3,0(r17) - ldq r4,0(r18) - - subq r19,1,r19 - and r19,4-1,r2 C number of limbs in first loop - bis r31,r31,r0 - beq r2,$L0 C if multiple of 4 limbs, skip first loop - - subq r19,r2,r19 - -$Loop0: subq r2,1,r2 - ldq r5,8(r17) - addq r4,r0,r4 - ldq r6,8(r18) - cmpult r4,r0,r1 - subq r3,r4,r4 - cmpult r3,r4,r0 - stq r4,0(r16) - bis r0,r1,r0 - - addq r17,8,r17 - addq r18,8,r18 - bis r5,r5,r3 - bis r6,r6,r4 - addq r16,8,r16 - bne r2,$Loop0 - -$L0: beq r19,$Lend - - ALIGN(8) -$Loop: subq r19,4,r19 - - ldq r5,8(r17) - addq r4,r0,r4 - ldq r6,8(r18) - cmpult r4,r0,r1 - subq r3,r4,r4 - cmpult r3,r4,r0 - stq r4,0(r16) - bis r0,r1,r0 - - ldq r3,16(r17) - addq r6,r0,r6 - ldq r4,16(r18) - cmpult r6,r0,r1 - subq r5,r6,r6 - cmpult r5,r6,r0 - stq r6,8(r16) - bis r0,r1,r0 - - ldq r5,24(r17) - addq r4,r0,r4 - ldq r6,24(r18) - cmpult r4,r0,r1 - subq r3,r4,r4 - cmpult r3,r4,r0 - stq r4,16(r16) - bis r0,r1,r0 - - ldq r3,32(r17) - addq r6,r0,r6 - ldq r4,32(r18) - cmpult r6,r0,r1 - subq r5,r6,r6 - cmpult r5,r6,r0 - stq r6,24(r16) - bis r0,r1,r0 - - addq r17,32,r17 - addq r18,32,r18 - addq r16,32,r16 - bne r19,$Loop - -$Lend: addq r4,r0,r4 - cmpult r4,r0,r1 - subq r3,r4,r4 - cmpult r3,r4,r0 - stq r4,0(r16) - bis r0,r1,r0 - ret r31,(r26),1 -EPILOGUE(mpn_sub_n) -ASM_END() diff --git a/rts/gmp/mpn/alpha/submul_1.asm b/rts/gmp/mpn/alpha/submul_1.asm deleted file mode 100644 index caec1a7..0000000 --- a/rts/gmp/mpn/alpha/submul_1.asm +++ /dev/null @@ -1,87 +0,0 @@ -dnl Alpha __gmpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright (C) 1992, 1994, 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -dnl INPUT PARAMETERS -dnl res_ptr r16 -dnl s1_ptr r17 -dnl size r18 -dnl s2_limb r19 - -dnl This code runs at 42 cycles/limb on EV4, 18 cycles/limb on EV5, and 7 -dnl cycles/limb on EV6. - -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/rts/gmp/mpn/alpha/udiv_qrnnd.S b/rts/gmp/mpn/alpha/udiv_qrnnd.S deleted file mode 100644 index 53814bb..0000000 --- a/rts/gmp/mpn/alpha/udiv_qrnnd.S +++ /dev/null @@ -1,151 +0,0 @@ - # Alpha 21064 __udiv_qrnnd - - # Copyright (C) 1992, 1994, 1995, 1997, 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - .set noreorder - .set noat -.text - .align 3 - .globl __gmpn_udiv_qrnnd - .ent __gmpn_udiv_qrnnd -__gmpn_udiv_qrnnd: - .frame $30,0,$26,0 - .prologue 0 -#define cnt $2 -#define tmp $3 -#define rem_ptr $16 -#define n1 $17 -#define n0 $18 -#define d $19 -#define qb $20 - - ldiq cnt,16 - blt d,.Largedivisor - -.Loop1: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule d,n1,qb - subq n1,d,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,.Loop1 - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -.Largedivisor: - and n0,1,$4 - - srl n0,1,n0 - sll n1,63,tmp - or tmp,n0,n0 - srl n1,1,n1 - - and d,1,$6 - srl d,1,$5 - addq $5,$6,$5 - -.Loop2: cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - cmplt n0,0,tmp - addq n1,n1,n1 - bis n1,tmp,n1 - addq n0,n0,n0 - cmpule $5,n1,qb - subq n1,$5,tmp - cmovne qb,tmp,n1 - bis n0,qb,n0 - subq cnt,1,cnt - bgt cnt,.Loop2 - - addq n1,n1,n1 - addq $4,n1,n1 - bne $6,.LOdd - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - -.LOdd: - /* q' in n0. r' in n1 */ - addq n1,n0,n1 - cmpult n1,n0,tmp # tmp := carry from addq - beq tmp,.LLp6 - addq n0,1,n0 - subq n1,d,n1 -.LLp6: cmpult n1,d,tmp - bne tmp,.LLp7 - addq n0,1,n0 - subq n1,d,n1 -.LLp7: - stq n1,0(rem_ptr) - bis $31,n0,$0 - ret $31,($26),1 - - .end __gmpn_udiv_qrnnd diff --git a/rts/gmp/mpn/alpha/umul.asm b/rts/gmp/mpn/alpha/umul.asm deleted file mode 100644 index 44428ed..0000000 --- a/rts/gmp/mpn/alpha/umul.asm +++ /dev/null @@ -1,39 +0,0 @@ -dnl Currently unused. - - -dnl Copyright (C) 1999, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - .set noreorder - .set volatile - .set noat - -.text - .align 3 - .globl __umul_ppmm - .ent __umul_ppmm -__umul_ppmm: -__umul_ppmm..ng: - .frame $30,0,$26,0 - .prologue 0 - mulq $17,$18,$1 - umulh $17,$18,$0 - stq $1,0($16) - ret $31,($26),1 - .end __umul_ppmm diff --git a/rts/gmp/mpn/alpha/unicos.m4 b/rts/gmp/mpn/alpha/unicos.m4 deleted file mode 100644 index 7ff26c0..0000000 --- a/rts/gmp/mpn/alpha/unicos.m4 +++ /dev/null @@ -1,63 +0,0 @@ -divert(-1) - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -define(`ASM_START', - `.ident dummy') - -define(`X',`^X$1') -define(`FLOAT64', - `dnl - .psect $1@crud,data -$1: .t_floating $2 - .endp') - -define(`PROLOGUE', - `dnl - .stack 192 ; What does this mean? Only Cray knows. - .psect $1@code,code,cache -$1::') -define(`PROLOGUE_GP', `PROLOGUE($1)') - -define(`EPILOGUE', - `dnl - .endp') - -define(`DATASTART', - `dnl - .psect $1@crud,data -$1:') -define(`DATAEND', - `dnl - .endp') - -define(`ASM_END', - `dnl - .end') - -define(`unop',`bis r31,r31,r31') ; Unicos assembler lacks unop -define(`cvttqc',`cvttq/c') - -define(`ALIGN',`') ; Unicos assembler seems to align using garbage - -divert - diff --git a/rts/gmp/mpn/arm/add_n.S b/rts/gmp/mpn/arm/add_n.S deleted file mode 100644 index fb3f8f7..0000000 --- a/rts/gmp/mpn/arm/add_n.S +++ /dev/null @@ -1,77 +0,0 @@ -@ ARM mpn_add -- Add two limb vectors of the same length > 0 and store sum in -@ a third limb vector. -@ Contributed by Robert Harley. - -@ Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - -#define s r0 -#define a r1 -#define b r2 -#define n r3 - -#define sl r10 -#define fp r11 -#define ip r12 -#define sp r13 -#define lr r14 -#define pc r15 - -.text - .align 0 - .global __gmpn_add_n - .type __gmpn_add_n,%function -__gmpn_add_n: - stmfd sp!, { r8, r9, lr } - movs n, n, lsr #1 - bcc skip1 - ldr ip, [a], #4 - ldr lr, [b], #4 - adds ip, ip, lr - str ip, [s], #4 -skip1: - tst n, #1 - beq skip2 - ldmia a!, { r8, r9 } - ldmia b!, { ip, lr } - adcs r8, r8, ip - adcs r9, r9, lr - stmia s!, { r8, r9 } -skip2: - bics n, n, #1 - beq return - stmfd sp!, { r4, r5, r6, r7 } -add_n_loop: - ldmia a!, { r4, r5, r6, r7 } - ldmia b!, { r8, r9, ip, lr } - adcs r4, r4, r8 - ldr r8, [s] /* Bring stuff into cache. */ - adcs r5, r5, r9 - adcs r6, r6, ip - adcs r7, r7, lr - stmia s!, { r4, r5, r6, r7 } - sub n, n, #2 - teq n, #0 - bne add_n_loop - ldmfd sp!, { r4, r5, r6, r7 } -return: - adc r0, n, #0 - ldmfd sp!, { r8, r9, pc } -end: - .size __gmpn_add_n, end - __gmpn_add_n diff --git a/rts/gmp/mpn/arm/addmul_1.S b/rts/gmp/mpn/arm/addmul_1.S deleted file mode 100644 index 396fff7..0000000 --- a/rts/gmp/mpn/arm/addmul_1.S +++ /dev/null @@ -1,89 +0,0 @@ -@ ARM mpn_mul_1 -- Multiply a limb vector with a limb and add the result to a -@ second limb vector. -@ Contributed by Robert Harley. - -@ Copyright (C) 1998, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - -#define p r0 -#define a r1 -#define n r2 -#define w r3 - -#define z r11 - -#define ip r12 -#define sp r13 -#define lr r14 -#define pc r15 - -.text - .align 0 - .global __gmpn_addmul_1 - .type __gmpn_addmul_1,%function -__gmpn_addmul_1: - stmfd sp!, { r8-r11, lr } - mov z, #0 - mov ip, #0 - movs n, n, lsr #1 - bcc skip1 - ldr lr, [a], #4 - ldr r9, [p] - umlal r9, ip, w, lr - str r9, [p], #4 -skip1: - movs n, n, lsr #1 - bcc skip2 - ldmia p, { r9, r10 } - adds r8, ip, r9 - adc r9, z, #0 - ldmia a!, { ip, lr } - umlal r8, r9, w, ip - adds r9, r9, r10 - adc ip, z, #0 - umlal r9, ip, w, lr - stmia p!, { r8, r9 } -skip2: - teq n, #0 - beq return - stmfd sp!, { r4-r7 } -addmul_loop: - ldmia p, { r5, r6, r7, r8 } - adds r4, ip, r5 - adc r5, z, #0 - ldmia a!, { r9, r10, ip, lr } - umlal r4, r5, w, r9 - adds r5, r5, r6 - adc r6, z, #0 - umlal r5, r6, w, r10 - adds r6, r6, r7 - adc r7, z, #0 - umlal r6, r7, w, ip - adds r7, r7, r8 - adc ip, z, #0 - umlal r7, ip, w, lr - subs n, n, #1 - stmia p!, { r4, r5, r6, r7 } - bne addmul_loop - ldmfd sp!, { r4-r7 } -return: - mov r0, ip - ldmfd sp!, { r8-r11, pc } -end: - .size __gmpn_addmul_1, end - __gmpn_addmul_1 diff --git a/rts/gmp/mpn/arm/gmp-mparam.h b/rts/gmp/mpn/arm/gmp-mparam.h deleted file mode 100644 index a35b0c7..0000000 --- a/rts/gmp/mpn/arm/gmp-mparam.h +++ /dev/null @@ -1,34 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 21 -#endif -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 48 -#endif diff --git a/rts/gmp/mpn/arm/mul_1.S b/rts/gmp/mpn/arm/mul_1.S deleted file mode 100644 index bae526a..0000000 --- a/rts/gmp/mpn/arm/mul_1.S +++ /dev/null @@ -1,81 +0,0 @@ -@ ARM mpn_addmul_1 -- Multiply a limb vector with a limb and store the result -@ in a second limb vector. -@ Contributed by Robert Harley. - -@ Copyright (C) 1998, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - -#define p r0 -#define a r1 -#define n r2 -#define w r3 - -#define sl r10 -#define fp r11 -#define ip r12 -#define sp r13 -#define lr r14 -#define pc r15 - -.text - .align 0 - .global __gmpn_mul_1 - .type __gmpn_mul_1,%function -__gmpn_mul_1: - stmfd sp!, { r8, r9, lr } - ands ip, n, #1 - beq skip1 - ldr lr, [a], #4 - umull r9, ip, w, lr - str r9, [p], #4 -skip1: - tst n, #2 - beq skip2 - mov r8, ip - ldmia a!, { ip, lr } - mov r9, #0 - umlal r8, r9, w, ip - mov ip, #0 - umlal r9, ip, w, lr - stmia p!, { r8, r9 } -skip2: - bics n, n, #3 - beq return - stmfd sp!, { r6, r7 } -mul_1_loop: - mov r6, ip - ldmia a!, { r8, r9, ip, lr } - ldr r7, [p] /* Bring stuff into cache. */ - mov r7, #0 - umlal r6, r7, w, r8 - mov r8, #0 - umlal r7, r8, w, r9 - mov r9, #0 - umlal r8, r9, w, ip - mov ip, #0 - umlal r9, ip, w, lr - subs n, n, #4 - stmia p!, { r6, r7, r8, r9 } - bne mul_1_loop - ldmfd sp!, { r6, r7 } -return: - mov r0, ip - ldmfd sp!, { r8, r9, pc } -end: - .size __gmpn_mul_1, end - __gmpn_mul_1 diff --git a/rts/gmp/mpn/arm/sub_n.S b/rts/gmp/mpn/arm/sub_n.S deleted file mode 100644 index 856505f..0000000 --- a/rts/gmp/mpn/arm/sub_n.S +++ /dev/null @@ -1,79 +0,0 @@ -@ ARM mpn_sub -- Subtract two limb vectors of the same length > 0 and store -@ difference in a third limb vector. -@ Contributed by Robert Harley. - -@ Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - -#define d r0 -#define a r1 -#define b r2 -#define n r3 - -#define sl r10 -#define fp r11 -#define ip r12 -#define sp r13 -#define lr r14 -#define pc r15 - -.text - .align 0 - .global __gmpn_sub_n - .type __gmpn_sub_n,%function -__gmpn_sub_n: - stmfd sp!, { r8, r9, lr } - subs ip, ip, ip - tst n, #1 - beq skip1 - ldr ip, [a], #4 - ldr lr, [b], #4 - subs ip, ip, lr - str ip, [d], #4 -skip1: - tst n, #2 - beq skip2 - ldmia a!, { r8, r9 } - ldmia b!, { ip, lr } - sbcs r8, r8, ip - sbcs r9, r9, lr - stmia d!, { r8, r9 } -skip2: - bics n, n, #3 - beq return - stmfd sp!, { r4, r5, r6, r7 } -sub_n_loop: - ldmia a!, { r4, r5, r6, r7 } - ldmia b!, { r8, r9, ip, lr } - sbcs r4, r4, r8 - ldr r8, [d] /* Bring stuff into cache. */ - sbcs r5, r5, r9 - sbcs r6, r6, ip - sbcs r7, r7, lr - stmia d!, { r4, r5, r6, r7 } - sub n, n, #4 - teq n, #0 - bne sub_n_loop - ldmfd sp!, { r4, r5, r6, r7 } -return: - sbc r0, r0, r0 - and r0, r0, #1 - ldmfd sp!, { r8, r9, pc } -end: - .size __gmpn_sub_n, end - __gmpn_sub_n diff --git a/rts/gmp/mpn/asm-defs.m4 b/rts/gmp/mpn/asm-defs.m4 deleted file mode 100644 index aa20241..0000000 --- a/rts/gmp/mpn/asm-defs.m4 +++ /dev/null @@ -1,1182 +0,0 @@ -divert(-1) -dnl -dnl m4 macros for gmp assembly code, shared by all CPUs. -dnl -dnl These macros are designed for use with any m4 and have been used on -dnl GNU, FreeBSD, OpenBSD and SysV. -dnl -dnl GNU m4 and OpenBSD 2.7 m4 will give filenames and line numbers in error -dnl messages. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -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, supressing 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 SunOS 5.7 /usr/xpg4/m4 has them but /usr/ccs/m4 doesn't). See -dnl m4_lshift() and m4_rshift() below for workarounds. -dnl -dnl m4wrap() - in BSD m4, m4wrap() replaces any previous m4wrap() string, -dnl in SysV m4 it appends to it, and in GNU m4 it prepends. See -dnl m4wrap_prepend() below which brings uniformity to this. -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 OpenBSD 2.6 m4 - this m4 rejects decimal constants containing an 8 or 9 -dnl in eval(), making it pretty much unusable. This bug is confined -dnl to version 2.6 (it's not in 2.5, and has been 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 exapanded 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'))') - -m4wrap(`m4wrap_string') -define(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($@)') - -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 The basic __file__ macro comes out quoted, like `foo.asm', and -dnl m4_file_seen_last is defined like that too. -dnl -dnl This only needs to be used with something that could generate an error -dnl message in m4wrap text. The x86 PROLOGUE is the only such at the -dnl moment (at end of input its m4wrap checks for missing EPILOGUE). A few -dnl include()s can easily trick this scheme, but you'd expect an EPILOGUE -dnl in the same file as the PROLOGUE. - -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) -`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_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: 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: 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-incl.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 -------------------------------------------------------------------------- -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 "C" works like a FORTRAN-style comment character. This can be used for -dnl comments to the right of assembly instructions, where just dnl would -dnl remove the linefeed, and concatenate adjacent lines. -dnl -dnl "C" and/or "dnl" are useful when an assembler doesn't support comments, -dnl or where different assemblers for a particular CPU have different -dnl comment styles. The intermediate ".s" files will end up with no -dnl 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. - -define(C, ` -dnl') - - -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') - -dnl aors_n -m4_not_for_expansion(`OPERATION_add_n') -m4_not_for_expansion(`OPERATION_sub_n') - -dnl aorsmul_n -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 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 Processing is terminated immediately since missing something like -dnl KARATSUBA_SQR_THRESHOLD can lead to infinite loops with endless error -dnl 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, 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(num) -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 -dnl plain "ret", say, 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 -m4_doublequote(ifdef(`__file__',__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: 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 BYTES_PER_MP_LIMB*COUNT, the number of bytes -dnl processed in each unrolled loop. -dnl -dnl BYTES_PER_MP_LIMB 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(`BYTES_PER_MP_LIMB') -`eval(UNROLL_COUNT * BYTES_PER_MP_LIMB)') - -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(`BYTES_PER_MP_LIMB') -`eval(CHUNK_COUNT * BYTES_PER_MP_LIMB)') - - -dnl Usage: MPN(name) -dnl -dnl Add MPN_PREFIX to a name. -dnl MPN_PREFIX defaults to "__gmpn_" if not defined. - -ifdef(`MPN_PREFIX',, -`define(`MPN_PREFIX',`__gmpn_')') - -define(MPN, -m4_assert_numargs(1) -`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) -`define(`mpn_$1',`MPN(`$1')')') - -define_mpn(add) -define_mpn(add_1) -define_mpn(add_n) -define_mpn(add_nc) -define_mpn(addmul_1) -define_mpn(addmul_1c) -define_mpn(addsub_n) -define_mpn(addsub_nc) -define_mpn(and_n) -define_mpn(andn_n) -define_mpn(bdivmod) -define_mpn(cmp) -define_mpn(com_n) -define_mpn(copyd) -define_mpn(copyi) -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(ior_n) -define_mpn(iorn_n) -define_mpn(kara_mul_n) -define_mpn(kara_sqr_n) -define_mpn(lshift) -define_mpn(lshiftc) -define_mpn(mod_1) -define_mpn(mod_1c) -define_mpn(mul) -define_mpn(mul_1) -define_mpn(mul_1c) -define_mpn(mul_basecase) -define_mpn(mul_n) -define_mpn(perfect_square_p) -define_mpn(popcount) -define_mpn(preinv_mod_1) -define_mpn(nand_n) -define_mpn(nior_n) -define_mpn(random) -define_mpn(random2) -define_mpn(rshift) -define_mpn(rshiftc) -define_mpn(scan0) -define_mpn(scan1) -define_mpn(set_str) -define_mpn(sqr_basecase) -define_mpn(sub_n) -define_mpn(sqrtrem) -define_mpn(sub) -define_mpn(sub_1) -define_mpn(sub_n) -define_mpn(sub_nc) -define_mpn(submul_1) -define_mpn(submul_1c) -define_mpn(toom3_mul_n) -define_mpn(toom3_sqr_n) -define_mpn(umul_ppmm) -define_mpn(udiv_qrnnd) -define_mpn(xnor_n) -define_mpn(xor_n) - -define(`ASM_START', - `') - -define(`PROLOGUE', - ` - TEXT - ALIGN(4) - GLOBL GSYM_PREFIX`$1' - TYPE(GSYM_PREFIX`$1',`function') -GSYM_PREFIX`$1':') - -define(`EPILOGUE', - ` - SIZE(GSYM_PREFIX`$1',.-GSYM_PREFIX`$1')') - -dnl LSYM_PREFIX might be L$, so defn() must be used to quote it or the L -dnl will expand as the L macro, an infinite recursion. -define(`L',`defn(`LSYM_PREFIX')$1') - -define(`INT32', - ` - ALIGN(4) -$1: - W32 $2 - ') - -define(`INT64', - ` - ALIGN(8) -$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 detects. -dnl -dnl ALIGN_FILL_0x90, if defined and equal to "yes", means a ", 0x90" should -dnl be appended (this is for x86). - -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) -`') - - -divert`'dnl diff --git a/rts/gmp/mpn/clipper/add_n.s b/rts/gmp/mpn/clipper/add_n.s deleted file mode 100644 index 538a1ca..0000000 --- a/rts/gmp/mpn/clipper/add_n.s +++ /dev/null @@ -1,48 +0,0 @@ -; Clipper __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -.text - .align 16 -.globl ___gmpn_add_n -___gmpn_add_n: - subq $8,sp - storw r6,(sp) - loadw 12(sp),r2 - loadw 16(sp),r3 - loadq $0,r6 ; clear carry-save register - -.Loop: loadw (r1),r4 - loadw (r2),r5 - addwc r6,r6 ; restore carry from r6 - addwc r5,r4 - storw r4,(r0) - subwc r6,r6 ; save carry in r6 - addq $4,r0 - addq $4,r1 - addq $4,r2 - subq $1,r3 - brne .Loop - - negw r6,r0 - loadw (sp),r6 - addq $8,sp - ret sp diff --git a/rts/gmp/mpn/clipper/mul_1.s b/rts/gmp/mpn/clipper/mul_1.s deleted file mode 100644 index c0c7564..0000000 --- a/rts/gmp/mpn/clipper/mul_1.s +++ /dev/null @@ -1,47 +0,0 @@ -; Clipper __gmpn_mul_1 -- Multiply a limb vector with a limb and store -; the result in a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -.text - .align 16 -.globl ___gmpn_mul_1 -___gmpn_mul_1: - subq $8,sp - storw r6,(sp) - loadw 12(sp),r2 - loadw 16(sp),r3 - loadq $0,r6 ; clear carry limb - -.Loop: loadw (r1),r4 - mulwux r3,r4 - addw r6,r4 ; add old carry limb into low product limb - loadq $0,r6 - addwc r5,r6 ; propagate cy into high product limb - storw r4,(r0) - addq $4,r0 - addq $4,r1 - subq $1,r2 - brne .Loop - - movw r6,r0 - loadw 0(sp),r6 - addq $8,sp - ret sp diff --git a/rts/gmp/mpn/clipper/sub_n.s b/rts/gmp/mpn/clipper/sub_n.s deleted file mode 100644 index 44d8797..0000000 --- a/rts/gmp/mpn/clipper/sub_n.s +++ /dev/null @@ -1,48 +0,0 @@ -; Clipper __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -.text - .align 16 -.globl ___gmpn_sub_n -___gmpn_sub_n: - subq $8,sp - storw r6,(sp) - loadw 12(sp),r2 - loadw 16(sp),r3 - loadq $0,r6 ; clear carry-save register - -.Loop: loadw (r1),r4 - loadw (r2),r5 - addwc r6,r6 ; restore carry from r6 - subwc r5,r4 - storw r4,(r0) - subwc r6,r6 ; save carry in r6 - addq $4,r0 - addq $4,r1 - addq $4,r2 - subq $1,r3 - brne .Loop - - negw r6,r0 - loadw (sp),r6 - addq $8,sp - ret sp diff --git a/rts/gmp/mpn/cray/README b/rts/gmp/mpn/cray/README deleted file mode 100644 index 8195c67..0000000 --- a/rts/gmp/mpn/cray/README +++ /dev/null @@ -1,14 +0,0 @@ -The (poorly optimized) code in this directory was originally written for a -j90 system, but finished on a c90. It should work on all Cray vector -computers. For the T3E and T3D systems, the `alpha' subdirectory at the -same level as the directory containing this file, is much better. - -* `+' seems to be faster than `|' when combining carries. - -* It is possible that the best multiply performance would be achived by - storing only 24 bits per element, and using lazy carry propagation. Before - calling i24mult, full carry propagation would be needed. - -* Supply tasking versions of the C loops. - - diff --git a/rts/gmp/mpn/cray/add_n.c b/rts/gmp/mpn/cray/add_n.c deleted file mode 100644 index 1fdb394..0000000 --- a/rts/gmp/mpn/cray/add_n.c +++ /dev/null @@ -1,96 +0,0 @@ -/* mpn_add_n -- Add two limb vectors of equal, non-zero length. - For Cray vector processors. - - Copyright (C) 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 the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or (at your - option) any later version. - - The GNU MP Library is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with the GNU MP Library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -mpn_add_n (c, a, b, n) - mp_ptr c; - mp_srcptr a, b; - mp_size_t n; -{ - mp_size_t i; - mp_size_t nm1 = n - 1; - int more_carries = 0; - int carry_out; - - /* For small operands the non-vector code is faster. */ - if (n < 16) - goto sequential; - - if (a == c || b == c) - { - TMP_DECL (marker); - TMP_MARK (marker); - if (c == a) - { - /* allocate temp space for a */ - mp_ptr ax = (mp_ptr) TMP_ALLOC (n * BYTES_PER_MP_LIMB); - MPN_COPY (ax, a, n); - a = (mp_srcptr) ax; - } - if (c == b) - { - /* allocate temp space for b */ - mp_ptr bx = (mp_ptr) TMP_ALLOC (n * BYTES_PER_MP_LIMB); - MPN_COPY (bx, b, n); - b = (mp_srcptr) bx; - } - carry_out = mpn_add_n (c, a, b, n); - TMP_FREE (marker); - return carry_out; - } - - carry_out = a[nm1] + b[nm1] < a[nm1]; - -#pragma _CRI ivdep /* Cray PVP systems */ - for (i = nm1; i > 0; i--) - { - int cy_in; - cy_in = a[i - 1] + b[i - 1] < a[i - 1]; - c[i] = a[i] + b[i] + cy_in; - more_carries += c[i] < cy_in; - } - c[0] = a[0] + b[0]; - - if (more_carries) - { - /* This won't vectorize, but we should come here rarely. */ - int cy; - sequential: - cy = 0; - for (i = 0; i < n; i++) - { - mp_limb_t ai, ci, t; - ai = a[i]; - t = b[i] + cy; - cy = t < cy; - ci = ai + t; - cy += ci < ai; - c[i] = ci; - } - carry_out = cy; - } - - return carry_out; -} diff --git a/rts/gmp/mpn/cray/addmul_1.c b/rts/gmp/mpn/cray/addmul_1.c deleted file mode 100644 index 031b4e8..0000000 --- a/rts/gmp/mpn/cray/addmul_1.c +++ /dev/null @@ -1,46 +0,0 @@ -/* mpn_addmul_1 for Cray PVP. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#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_ptr p0, p1, tp; - mp_limb_t cy_limb; - TMP_DECL (marker); - TMP_MARK (marker); - - p1 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - p0 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - tp = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - - GMPN_MULWW (p1, p0, up, &n, &limb); - cy_limb = mpn_add_n (tp, rp, p0, n); - rp[0] = tp[0]; - cy_limb += mpn_add_n (rp + 1, tp + 1, p1, n - 1); - cy_limb += p1[n - 1]; - - TMP_FREE (marker); - return cy_limb; -} diff --git a/rts/gmp/mpn/cray/gmp-mparam.h b/rts/gmp/mpn/cray/gmp-mparam.h deleted file mode 100644 index 14f7b8e..0000000 --- a/rts/gmp/mpn/cray/gmp-mparam.h +++ /dev/null @@ -1,27 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 64 -#define BITS_PER_SHORTINT 32 -#define BITS_PER_CHAR 8 diff --git a/rts/gmp/mpn/cray/mul_1.c b/rts/gmp/mpn/cray/mul_1.c deleted file mode 100644 index 0c8750b..0000000 --- a/rts/gmp/mpn/cray/mul_1.c +++ /dev/null @@ -1,44 +0,0 @@ -/* mpn_mul_1 for Cray PVP. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#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_ptr p0, p1; - mp_limb_t cy_limb; - TMP_DECL (marker); - TMP_MARK (marker); - - p1 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - p0 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - - GMPN_MULWW (p1, p0, up, &n, &limb); - rp[0] = p0[0]; - cy_limb = mpn_add_n (rp + 1, p0 + 1, p1, n - 1); - cy_limb += p1[n - 1]; - - TMP_FREE (marker); - return cy_limb; -} diff --git a/rts/gmp/mpn/cray/mulww.f b/rts/gmp/mpn/cray/mulww.f deleted file mode 100644 index 99507c1..0000000 --- a/rts/gmp/mpn/cray/mulww.f +++ /dev/null @@ -1,54 +0,0 @@ -c Helper for mpn_mul_1, mpn_addmul_1, and mpn_submul_1 for Cray PVP. - -c Copyright (C) 1996, 2000 Free Software Foundation, Inc. - -c This file is part of the GNU MP Library. - -c The GNU MP Library is free software; you can redistribute it and/or -c modify it under the terms of the GNU Lesser General Public License as -c published by the Free Software Foundation; either version 2.1 of the -c License, or (at your option) any later version. - -c The GNU MP Library is distributed in the hope that it will be useful, -c but WITHOUT ANY WARRANTY; without even the implied warranty of -c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -c Lesser General Public License for more details. - -c You should have received a copy of the GNU Lesser General Public -c License along with the GNU MP Library; see the file COPYING.LIB. If -c not, write to the Free Software Foundation, Inc., 59 Temple Place - -c Suite 330, Boston, MA 02111-1307, USA. - -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/rts/gmp/mpn/cray/mulww.s b/rts/gmp/mpn/cray/mulww.s deleted file mode 100644 index 890cdcf..0000000 --- a/rts/gmp/mpn/cray/mulww.s +++ /dev/null @@ -1,245 +0,0 @@ -* Helper for mpn_mul_1, mpn_addmul_1, and mpn_submul_1 for Cray PVP. - -* Copyright (C) 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 the GNU Lesser General Public License as -* published by the Free Software Foundation; either version 2.1 of the -* License, or (at your option) any later version. - -* The GNU MP Library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. - -* You should have received a copy of the GNU Lesser General Public -* License along with the GNU MP Library; see the file COPYING.LIB. If -* not, write to the Free Software Foundation, Inc., 59 Temple Place - -* Suite 330, Boston, MA 02111-1307, USA. - - 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 ;GMPN_MUL 1 - CON O'0535270000000000000000 ;WW 1 - CON O'0000000000000001200012 ;trbk tbl 1 - VWD 32/0,32/P.GMPN_MULWW ;trbk tbl 1 - CON O'0014003000000000001416 ;trbk tbl 1 - CON O'0000000000000000000011 ;trbk tbl 1 - CON O'0000000000000000000215 ;trbk tbl 1 - BSSZ 1 ;trbk tbl 1 -@CODE SECTION CODE -@CODE = P.* -L3 = P.* ; 1 - A0 A6 ;arg base 1 - A5 6 ;num Darg 1 - B03,A5 0,A0 ;load DAs 1 - A0 A1+A2 ; 1 - A5 1 ;num Ts 1 - 0,A0 T00,A5 ; 1 - B02 A2 ;new base 1 - B66 A3 ;stk top 1 - B01 A6 ;arg base 1 - A7 P.L4 ;ofrn rtn 1 - B00 A7 ;return 1 - A6 @DATA ; 1 - J $STKOFEN ;$STKOFEN 1 -GMPN_MULWW = P.* ; 1 - A0 @DATA+3 ;(trbk) 1 - B77 A0 ;(trbk) 1 - A1 13 ;num Bs 1 - A0 B66 ;stk top 1 - A2 B66 ;stk tmp 1 - A4 B67 ;stk limt 1 - 0,A0 B77,A1 ; 1 - A7 782 ;stk size 1 - A3 A2+A7 ; 1 - A0 A4-A3 ; 1 - JAM L3 ;overflow 1 - A0 A6 ;arg base 1 - A5 6 ;num Darg 1 - B03,A5 0,A0 ;load DAs 1 - A0 A1+A2 ; 1 - A5 1 ;num Ts 1 - 0,A0 T00,A5 ; 1 - B02 A2 ;new base 1 - B66 A3 ;new top 1 - B01 A6 ;arg base 1 -L4 = P.* ;ofrn rtn 1 - A7 B07 ;regs 14 - S7 0,A7 ; 14 - A6 B10 ;regs 9 - S6 0,A6 ; 9 - S5 1 ; 14 - S4 <22 ; 9 - S7 S7-S5 ; 14 - S5 #S7 ; 14 - T00 S6 ;regs 10 - S6 S6>22 ; 10 - S7 T00 ;regs 11 - S7 S7>44 ; 11 - S3 T00 ;regs 9 - S3 S3&S4 ; 9 - S6 S6&S4 ; 10 - S7 S7&S4 ; 11 - S3 S3<24 ; 9 - S6 S6<24 ; 10 - S7 S7<24 ; 11 - S0 S5 ;regs 14 - S4 S5 ;regs 14 - S1 S6 ;regs 14 - S2 S3 ;regs 14 - S3 S7 ;regs 14 - JSP L5 ; 14 -L6 = P.* ; 14 - S7 -S4 ; 14 - A2 S7 ;regs 14 - VL A2 ;regs 14 - A3 B06 ;s_bt_sp 14 - A5 B05 ;s_bt_sp 14 - A4 B04 ;s_bt_sp 14 - A1 VL ; 14 - A2 S4 ;regs 14 -L7 = P.* ; 14 - A0 A3 ;regs 15 - VL A1 ;regs 15 - V7 ,A0,1 ; 15 - B11 A5 ;s_bt_sp 15 - A7 22 ; 17 - B12 A4 ;s_bt_sp 17 - V6 V7>A7 ; 17 - B13 A3 ;s_bt_sp 17 - S7 <22 ; 17 - A3 B02 ;s_bt_sp 17 - V5 S7&V6 ; 17 - A6 24 ; 17 - V4 V5A5 ; 18 - V2 S1*FV1 ; 21 - V3 S7&V5 ; 18 - A0 14 ; 34 - B77 A0 ;regs 34 - A4 B77 ;regs 34 - A0 A4+A3 ; 34 - ,A0,1 V2 ;v_ld_str 34 - V0 V3A7 ; 28 - V2 S2*FV0 ; 22 - V3 V6+V2 ; 22 - S7 <20 ; 28 - V1 S7&V3 ; 28 - A4 270 ; 34 - A0 A4+A3 ; 34 - ,A0,1 V0 ;v_ld_str 34 - A4 14 ; 34 - A0 A4+A3 ; 34 - V7 ,A0,1 ;v_ld_str 34 - V6 V1A5 ; 32 - V0 S1*FV4 ; 23 - A5 654 ; 34 - A0 A5+A3 ; 34 - ,A0,1 V1 ;v_ld_str 34 - V6 V7+V0 ; 23 - A5 2 ; 32 - V2 V6A6 ; 28 - A5 654 ; 34 - CPW ;cmr_vrsp 34 - A0 A5+A3 ; 34 - V1 ,A0,1 ;v_ld_str 34 - A5 398 ; 34 - A0 A5+A3 ; 34 - V3 ,A0,1 ;v_ld_str 34 - V6 V4+V1 ; 32 - V2 V3>A6 ; 32 - V5 V6+V2 ; 32 - A6 B12 ;s_bt_sp 32 - V4 V3 0; i--) - { - int cy_in; mp_limb_t t; - cy_in = a[i - 1] < b[i - 1]; - t = a[i] - b[i]; - more_carries += t < cy_in; - c[i] = t - cy_in; - } - c[0] = a[0] - b[0]; - - if (more_carries) - { - /* This won't vectorize, but we should come here rarely. */ - int cy; - sequential: - cy = 0; - for (i = 0; i < n; i++) - { - mp_limb_t ai, ci, t; - ai = a[i]; - t = b[i] + cy; - cy = t < cy; - ci = ai - t; - cy += ci > ai; - c[i] = ci; - } - carry_out = cy; - } - - return carry_out; -} diff --git a/rts/gmp/mpn/cray/submul_1.c b/rts/gmp/mpn/cray/submul_1.c deleted file mode 100644 index 4d2fb13..0000000 --- a/rts/gmp/mpn/cray/submul_1.c +++ /dev/null @@ -1,46 +0,0 @@ -/* mpn_submul_1 for Cray PVP. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#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_ptr p0, p1, tp; - mp_limb_t cy_limb; - TMP_DECL (marker); - TMP_MARK (marker); - - p1 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - p0 = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - tp = TMP_ALLOC (n * BYTES_PER_MP_LIMB); - - GMPN_MULWW (p1, p0, up, &n, &limb); - cy_limb = mpn_sub_n (tp, rp, p0, n); - rp[0] = tp[0]; - cy_limb += mpn_sub_n (rp + 1, tp + 1, p1, n - 1); - cy_limb += p1[n - 1]; - - TMP_FREE (marker); - return cy_limb; -} diff --git a/rts/gmp/mpn/generic/add_n.c b/rts/gmp/mpn/generic/add_n.c deleted file mode 100644 index 5fcb7e4..0000000 --- a/rts/gmp/mpn/generic/add_n.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_add_n -- Add two limb vectors of equal, non-zero length. - -Copyright (C) 1992, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -#if __STDC__ -mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size) -#else -mpn_add_n (res_ptr, s1_ptr, s2_ptr, size) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_srcptr s2_ptr; - mp_size_t size; -#endif -{ - register mp_limb_t x, y, cy; - register mp_size_t j; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - s2_ptr -= j; - res_ptr -= j; - - cy = 0; - do - { - y = s2_ptr[j]; - x = s1_ptr[j]; - y += cy; /* add previous carry to one addend */ - cy = (y < cy); /* get out carry from that addition */ - y = x + y; /* add other addend */ - cy = (y < x) + cy; /* get out carry from that add, combine */ - res_ptr[j] = y; - } - while (++j != 0); - - return cy; -} diff --git a/rts/gmp/mpn/generic/addmul_1.c b/rts/gmp/mpn/generic/addmul_1.c deleted file mode 100644 index 746ae31..0000000 --- a/rts/gmp/mpn/generic/addmul_1.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mpn_addmul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR - by S2_LIMB, add the S1_SIZE least significant limbs of the product to the - limb vector pointed to by RES_PTR. Return the most significant limb of - the product, adjusted for carry-out from the addition. - -Copyright (C) 1992, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_addmul_1 (res_ptr, s1_ptr, s1_size, s2_limb) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - mp_size_t s1_size; - register mp_limb_t s2_limb; -{ - register mp_limb_t cy_limb; - register mp_size_t j; - register mp_limb_t prod_high, prod_low; - register mp_limb_t x; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -s1_size; - - /* Offset the base pointers to compensate for the negative indices. */ - res_ptr -= j; - s1_ptr -= j; - - cy_limb = 0; - do - { - umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb); - - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb) + prod_high; - - x = res_ptr[j]; - prod_low = x + prod_low; - cy_limb += (prod_low < x); - res_ptr[j] = prod_low; - } - while (++j != 0); - - return cy_limb; -} diff --git a/rts/gmp/mpn/generic/addsub_n.c b/rts/gmp/mpn/generic/addsub_n.c deleted file mode 100644 index c9bab3e..0000000 --- a/rts/gmp/mpn/generic/addsub_n.c +++ /dev/null @@ -1,167 +0,0 @@ -/* mpn_addsub_n -- Add and Subtract two limb vectors of equal, non-zero length. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#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 / BYTES_PER_MP_LIMB / 6) - - -/* mpn_addsub_n. - r1[] = s1[] + s2[] - r2[] = s1[] - s2[] - All operands have n limbs. - In-place operations allowed. */ -mp_limb_t -#if __STDC__ -mpn_addsub_n (mp_ptr r1p, mp_ptr r2p, mp_srcptr s1p, mp_srcptr s2p, mp_size_t n) -#else -mpn_addsub_n (r1p, r2p, s1p, s2p, n) - mp_ptr r1p, r2p; - mp_srcptr s1p, s2p; - mp_size_t n; -#endif -{ - 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 || !HAVE_NATIVE_mpn_add_n - 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 || !HAVE_NATIVE_mpn_sub_n - 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 || !HAVE_NATIVE_mpn_sub_n - 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 || !HAVE_NATIVE_mpn_add_n - 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 || !HAVE_NATIVE_mpn_add_n - 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 || !HAVE_NATIVE_mpn_sub_n - 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 -#include -#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 * BYTES_PER_MP_LIMB); - r2p = malloc (n * BYTES_PER_MP_LIMB); - s1p = malloc (n * BYTES_PER_MP_LIMB); - s2p = malloc (n * BYTES_PER_MP_LIMB); - 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_addsub_n(r1p,r2p,s1p,s2p,n)); - printf ("combined addsub separate variables: %.3f\n", t); - TIME (t,mpn_addsub_n(r1p,r2p,r1p,s2p,n)); - printf (" combined addsub r1 overlap: %.3f\n", t); - TIME (t,mpn_addsub_n(r1p,r2p,r1p,s2p,n)); - printf (" combined addsub r2 overlap: %.3f\n", t); - TIME (t,mpn_addsub_n(r1p,r2p,r1p,r2p,n)); - printf (" combined addsub in-place: %.3f\n", t); - - return 0; -} -#endif diff --git a/rts/gmp/mpn/generic/bdivmod.c b/rts/gmp/mpn/generic/bdivmod.c deleted file mode 100644 index c4bcb41..0000000 --- a/rts/gmp/mpn/generic/bdivmod.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mpn/bdivmod.c: mpn_bdivmod for computing U/V mod 2^d. - -Copyright (C) 1991, 1993, 1994, 1995, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* q_high = mpn_bdivmod (qp, up, usize, vp, vsize, d). - - Puts the low d/BITS_PER_MP_LIMB limbs of Q = U / V mod 2^d at qp, and - returns the high d%BITS_PER_MP_LIMB bits of Q as the result. - - Also, U - Q * V mod 2^(usize*BITS_PER_MP_LIMB) is placed at up. Since the - low d/BITS_PER_MP_LIMB limbs of this difference are zero, the code allows - the limb vectors at qp to overwrite the low limbs at up, provided qp <= up. - - Preconditions: - 1. V is odd. - 2. usize * BITS_PER_MP_LIMB >= d. - 3. If Q and U overlap, qp <= up. - - Ken Weber (kweber@mat.ufrgs.br, kweber@mcs.kent.edu) - - Funding for this work has been partially provided by Conselho Nacional - de Desenvolvimento Cienti'fico e Tecnolo'gico (CNPq) do Brazil, Grant - 301314194-2, and was done while I was a visiting reseacher in the Instituto - de Matema'tica at Universidade Federal do Rio Grande do Sul (UFRGS). - - References: - T. Jebelean, An algorithm for exact division, Journal of Symbolic - Computation, v. 15, 1993, pp. 169-180. - - K. Weber, The accelerated integer GCD algorithm, ACM Transactions on - Mathematical Software, v. 21 (March), 1995, pp. 111-122. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -#if __STDC__ -mpn_bdivmod (mp_ptr qp, mp_ptr up, mp_size_t usize, - mp_srcptr vp, mp_size_t vsize, unsigned long int d) -#else -mpn_bdivmod (qp, up, usize, vp, vsize, d) - mp_ptr qp; - mp_ptr up; - mp_size_t usize; - mp_srcptr vp; - mp_size_t vsize; - unsigned long int d; -#endif -{ - mp_limb_t v_inv; - - /* 1/V mod 2^BITS_PER_MP_LIMB. */ - modlimb_invert (v_inv, vp[0]); - - /* Fast code for two cases previously used by the accel part of mpn_gcd. - (Could probably remove this now it's inlined there.) */ - if (usize == 2 && vsize == 2 && - (d == BITS_PER_MP_LIMB || d == 2*BITS_PER_MP_LIMB)) - { - mp_limb_t hi, lo; - mp_limb_t q = up[0] * v_inv; - umul_ppmm (hi, lo, q, vp[0]); - up[0] = 0, up[1] -= hi + q*vp[1], qp[0] = q; - if (d == 2*BITS_PER_MP_LIMB) - q = up[1] * v_inv, up[1] = 0, qp[1] = q; - return 0; - } - - /* Main loop. */ - while (d >= BITS_PER_MP_LIMB) - { - mp_limb_t q = up[0] * v_inv; - mp_limb_t b = mpn_submul_1 (up, vp, MIN (usize, vsize), q); - if (usize > vsize) - mpn_sub_1 (up + vsize, up + vsize, usize - vsize, b); - d -= BITS_PER_MP_LIMB; - up += 1, usize -= 1; - *qp++ = q; - } - - if (d) - { - mp_limb_t b; - mp_limb_t q = (up[0] * v_inv) & (((mp_limb_t)1< vsize) - mpn_sub_1 (up + vsize, up + vsize, usize - vsize, b); - return q; - } - - return 0; -} diff --git a/rts/gmp/mpn/generic/bz_divrem_n.c b/rts/gmp/mpn/generic/bz_divrem_n.c deleted file mode 100644 index d234b22..0000000 --- a/rts/gmp/mpn/generic/bz_divrem_n.c +++ /dev/null @@ -1,153 +0,0 @@ -/* mpn_bz_divrem_n and auxilliary routines. - - 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 GNU MP RELEASE. - - -Copyright (C) 2000 Free Software Foundation, Inc. -Contributed by Paul Zimmermann. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* -[1] Fast Recursive Division, by Christoph Burnikel and Joachim Ziegler, - Technical report MPI-I-98-1-022, october 1998. - http://www.mpi-sb.mpg.de/~ziegler/TechRep.ps.gz -*/ - -static mp_limb_t mpn_bz_div_3_halves_by_2 - _PROTO ((mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n)); - - -/* mpn_bz_divrem_n(n) calls 2*mul(n/2)+2*div(n/2), thus to be faster than - div(n) = 4*div(n/2), we need mul(n/2) to be faster than the classic way, - i.e. n/2 >= KARATSUBA_MUL_THRESHOLD */ -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD (7 * KARATSUBA_MUL_THRESHOLD) -#endif - -#if 0 -static -unused_mpn_divrem (qp, qxn, np, nn, dp, dn) - mp_ptr qp; - mp_size_t qxn; - mp_ptr np; - mp_size_t nn; - mp_srcptr dp; - mp_size_t dn; -{ - /* This might be useful: */ - if (qxn != 0) - { - mp_limb_t c; - mp_ptr tp = alloca ((nn + qxn) * BYTES_PER_MP_LIMB); - MPN_COPY (tp + qxn - nn, np, nn); - MPN_ZERO (tp, qxn); - c = mpn_divrem (qp, 0L, tp, nn + qxn, dp, dn); - /* Maybe copy proper part of tp to np? Documentation is unclear about - the returned np value when qxn != 0 */ - return c; - } -} -#endif - - -/* mpn_bz_divrem_n - Implements algorithm of page 8 in [1]: divides (np,2n) - by (dp,n) and puts the quotient in (qp,n), the remainder in (np,n). - Returns most significant limb of the quotient, which is 0 or 1. - Requires that the most significant bit of the divisor is set. */ - -mp_limb_t -#if __STDC__ -mpn_bz_divrem_n (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n) -#else -mpn_bz_divrem_n (qp, np, dp, n) - mp_ptr qp; - mp_ptr np; - mp_srcptr dp; - mp_size_t n; -#endif -{ - mp_limb_t qhl, cc; - - if (n % 2 != 0) - { - qhl = mpn_bz_divrem_n (qp + 1, np + 2, dp + 1, n - 1); - cc = mpn_submul_1 (np + 1, qp + 1, n - 1, dp[0]); - cc = mpn_sub_1 (np + n, np + n, 1, cc); - if (qhl) cc += mpn_sub_1 (np + n, np + n, 1, dp[0]); - while (cc) - { - qhl -= mpn_sub_1 (qp + 1, qp + 1, n - 1, (mp_limb_t) 1); - cc -= mpn_add_n (np + 1, np + 1, dp, n); - } - qhl += mpn_add_1 (qp + 1, qp + 1, n - 1, - mpn_sb_divrem_mn (qp, np, n + 1, dp, n)); - } - else - { - mp_size_t n2 = n/2; - qhl = mpn_bz_div_3_halves_by_2 (qp + n2, np + n2, dp, n2); - qhl += mpn_add_1 (qp + n2, qp + n2, n2, - mpn_bz_div_3_halves_by_2 (qp, np, dp, n2)); - } - return qhl; -} - - -/* divides (np, 3n) by (dp, 2n) and puts the quotient in (qp, n), - the remainder in (np, 2n) */ - -static mp_limb_t -#if __STDC__ -mpn_bz_div_3_halves_by_2 (mp_ptr qp, mp_ptr np, mp_srcptr dp, mp_size_t n) -#else -mpn_bz_div_3_halves_by_2 (qp, np, dp, n) - mp_ptr qp; - mp_ptr np; - mp_srcptr dp; - mp_size_t n; -#endif -{ - mp_size_t twon = n + n; - mp_limb_t qhl, cc; - mp_ptr tmp; - TMP_DECL (marker); - - TMP_MARK (marker); - if (n < BZ_THRESHOLD) - qhl = mpn_sb_divrem_mn (qp, np + n, twon, dp + n, n); - else - qhl = mpn_bz_divrem_n (qp, np + n, dp + n, n); - tmp = (mp_ptr) TMP_ALLOC (twon * BYTES_PER_MP_LIMB); - mpn_mul_n (tmp, qp, dp, n); - cc = mpn_sub_n (np, np, tmp, twon); - TMP_FREE (marker); - if (qhl) cc += mpn_sub_n (np + n, np + n, dp, n); - while (cc) - { - qhl -= mpn_sub_1 (qp, qp, n, (mp_limb_t) 1); - cc -= mpn_add_n (np, np, dp, twon); - } - return qhl; -} diff --git a/rts/gmp/mpn/generic/cmp.c b/rts/gmp/mpn/generic/cmp.c deleted file mode 100644 index 8e9792f..0000000 --- a/rts/gmp/mpn/generic/cmp.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpn_cmp -- Compare two low-level natural-number integers. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE. - There are no restrictions on the relative sizes of - the two arguments. - Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. */ - -int -#if __STDC__ -mpn_cmp (mp_srcptr op1_ptr, mp_srcptr op2_ptr, mp_size_t size) -#else -mpn_cmp (op1_ptr, op2_ptr, size) - mp_srcptr op1_ptr; - mp_srcptr op2_ptr; - mp_size_t size; -#endif -{ - mp_size_t i; - mp_limb_t op1_word, op2_word; - - for (i = size - 1; i >= 0; i--) - { - op1_word = op1_ptr[i]; - op2_word = op2_ptr[i]; - if (op1_word != op2_word) - goto diff; - } - return 0; - diff: - /* This can *not* be simplified to - op2_word - op2_word - since that expression might give signed overflow. */ - return (op1_word > op2_word) ? 1 : -1; -} diff --git a/rts/gmp/mpn/generic/diveby3.c b/rts/gmp/mpn/generic/diveby3.c deleted file mode 100644 index a2fb552..0000000 --- a/rts/gmp/mpn/generic/diveby3.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpn_divexact_by3 -- mpn division by 3, expecting no remainder. */ - -/* -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - - -#include "gmp.h" -#include "gmp-impl.h" - - -/* Multiplicative inverse of 3, modulo 2^BITS_PER_MP_LIMB. - 0xAAAAAAAB for 32 bits, 0xAAAAAAAAAAAAAAAB for 64 bits. */ -#define INVERSE_3 ((MP_LIMB_T_MAX / 3) * 2 + 1) - - -/* The "c += ..."s are adding the high limb of 3*l to c. That high limb - will be 0, 1 or 2. Doing two separate "+="s seems to turn out better - code on gcc (as of 2.95.2 at least). - - When a subtraction of a 0,1,2 carry value causes a borrow, that leaves a - limb value of either 0xFF...FF or 0xFF...FE and the multiply by INVERSE_3 - gives 0x55...55 or 0xAA...AA respectively, producing a further borrow of - only 0 or 1 respectively. Hence the carry out of each stage and for the - return value is always only 0, 1 or 2. */ - -mp_limb_t -#if __STDC__ -mpn_divexact_by3c (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t c) -#else -mpn_divexact_by3c (dst, src, size, c) - mp_ptr dst; - mp_srcptr src; - mp_size_t size; - mp_limb_t c; -#endif -{ - mp_size_t i; - - ASSERT (size >= 1); - - i = 0; - do - { - mp_limb_t l, s; - - s = src[i]; - l = s - c; - c = (l > s); - - l *= INVERSE_3; - dst[i] = l; - - c += (l > MP_LIMB_T_MAX/3); - c += (l > (MP_LIMB_T_MAX/3)*2); - } - while (++i < size); - - return c; -} diff --git a/rts/gmp/mpn/generic/divrem.c b/rts/gmp/mpn/generic/divrem.c deleted file mode 100644 index 30673e7..0000000 --- a/rts/gmp/mpn/generic/divrem.c +++ /dev/null @@ -1,101 +0,0 @@ -/* mpn_divrem -- Divide natural numbers, producing both remainder and - quotient. This is now just a middle layer for calling the new - internal mpn_tdiv_qr. - -Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -#if __STDC__ -mpn_divrem (mp_ptr qp, mp_size_t qxn, - mp_ptr np, mp_size_t nn, - mp_srcptr dp, mp_size_t dn) -#else -mpn_divrem (qp, qxn, np, nn, dp, dn) - mp_ptr qp; - mp_size_t qxn; - mp_ptr np; - mp_size_t nn; - mp_srcptr dp; - mp_size_t dn; -#endif -{ - if (dn == 1) - { - mp_limb_t ret; - mp_ptr q2p; - mp_size_t qn; - TMP_DECL (marker); - - TMP_MARK (marker); - q2p = (mp_ptr) TMP_ALLOC ((nn + qxn) * BYTES_PER_MP_LIMB); - - 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 (marker); - 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 (marker); - - TMP_MARK (marker); - if (qxn != 0) - { - mp_ptr n2p; - n2p = (mp_ptr) TMP_ALLOC ((nn + qxn) * BYTES_PER_MP_LIMB); - MPN_ZERO (n2p, qxn); - MPN_COPY (n2p + qxn, np, nn); - q2p = (mp_ptr) TMP_ALLOC ((nn - dn + qxn + 1) * BYTES_PER_MP_LIMB); - rp = (mp_ptr) TMP_ALLOC (dn * BYTES_PER_MP_LIMB); - 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 = (mp_ptr) TMP_ALLOC ((nn - dn + 1) * BYTES_PER_MP_LIMB); - rp = (mp_ptr) TMP_ALLOC (dn * BYTES_PER_MP_LIMB); - 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 (marker); - return qhl; - } -} diff --git a/rts/gmp/mpn/generic/divrem_1.c b/rts/gmp/mpn/generic/divrem_1.c deleted file mode 100644 index e93f241..0000000 --- a/rts/gmp/mpn/generic/divrem_1.c +++ /dev/null @@ -1,248 +0,0 @@ -/* mpn_divrem_1(quot_ptr, qsize, dividend_ptr, dividend_size, divisor_limb) -- - Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB. - Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR. - Return the single-limb remainder. - There are no constraints on the value of the divisor. - - QUOT_PTR and DIVIDEND_PTR might point to the same limb. - -Copyright (C) 1991, 1993, 1994, 1996, 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - - -/* __gmpn_divmod_1_internal(quot_ptr,dividend_ptr,dividend_size,divisor_limb) - Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB. - Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR. - Return the single-limb remainder. - There are no constraints on the value of the divisor. - - QUOT_PTR and DIVIDEND_PTR might point to the same limb. */ - -#ifndef UMUL_TIME -#define UMUL_TIME 1 -#endif - -#ifndef UDIV_TIME -#define UDIV_TIME UMUL_TIME -#endif - -static mp_limb_t -#if __STDC__ -__gmpn_divmod_1_internal (mp_ptr quot_ptr, - mp_srcptr dividend_ptr, mp_size_t dividend_size, - mp_limb_t divisor_limb) -#else -__gmpn_divmod_1_internal (quot_ptr, dividend_ptr, dividend_size, divisor_limb) - mp_ptr quot_ptr; - mp_srcptr dividend_ptr; - mp_size_t dividend_size; - mp_limb_t divisor_limb; -#endif -{ - mp_size_t i; - mp_limb_t n1, n0, r; - int dummy; - - /* ??? Should this be handled at all? Rely on callers? */ - if (dividend_size == 0) - return 0; - - /* If multiplication is much faster than division, and the - dividend is large, pre-invert the divisor, and use - only multiplications in the inner loop. */ - - /* This test should be read: - Does it ever help to use udiv_qrnnd_preinv? - && Does what we save compensate for the inversion overhead? */ - if (UDIV_TIME > (2 * UMUL_TIME + 6) - && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME) - { - int normalization_steps; - - count_leading_zeros (normalization_steps, divisor_limb); - if (normalization_steps != 0) - { - mp_limb_t divisor_limb_inverted; - - divisor_limb <<= normalization_steps; - invert_limb (divisor_limb_inverted, divisor_limb); - - n1 = dividend_ptr[dividend_size - 1]; - r = n1 >> (BITS_PER_MP_LIMB - normalization_steps); - - /* Possible optimization: - if (r == 0 - && divisor_limb > ((n1 << normalization_steps) - | (dividend_ptr[dividend_size - 2] >> ...))) - ...one division less... */ - - for (i = dividend_size - 2; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd_preinv (quot_ptr[i + 1], r, r, - ((n1 << normalization_steps) - | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))), - divisor_limb, divisor_limb_inverted); - n1 = n0; - } - udiv_qrnnd_preinv (quot_ptr[0], r, r, - n1 << normalization_steps, - divisor_limb, divisor_limb_inverted); - return r >> normalization_steps; - } - else - { - mp_limb_t divisor_limb_inverted; - - invert_limb (divisor_limb_inverted, divisor_limb); - - i = dividend_size - 1; - r = dividend_ptr[i]; - - if (r >= divisor_limb) - r = 0; - else - { - quot_ptr[i] = 0; - i--; - } - - for (; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd_preinv (quot_ptr[i], r, r, - n0, divisor_limb, divisor_limb_inverted); - } - return r; - } - } - else - { - if (UDIV_NEEDS_NORMALIZATION) - { - int normalization_steps; - - count_leading_zeros (normalization_steps, divisor_limb); - if (normalization_steps != 0) - { - divisor_limb <<= normalization_steps; - - n1 = dividend_ptr[dividend_size - 1]; - r = n1 >> (BITS_PER_MP_LIMB - normalization_steps); - - /* Possible optimization: - if (r == 0 - && divisor_limb > ((n1 << normalization_steps) - | (dividend_ptr[dividend_size - 2] >> ...))) - ...one division less... */ - - for (i = dividend_size - 2; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd (quot_ptr[i + 1], r, r, - ((n1 << normalization_steps) - | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))), - divisor_limb); - n1 = n0; - } - udiv_qrnnd (quot_ptr[0], r, r, - n1 << normalization_steps, - divisor_limb); - return r >> normalization_steps; - } - } - /* No normalization needed, either because udiv_qrnnd doesn't require - it, or because DIVISOR_LIMB is already normalized. */ - - i = dividend_size - 1; - r = dividend_ptr[i]; - - if (r >= divisor_limb) - r = 0; - else - { - quot_ptr[i] = 0; - i--; - } - - for (; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd (quot_ptr[i], r, r, n0, divisor_limb); - } - return r; - } -} - - - -mp_limb_t -#if __STDC__ -mpn_divrem_1 (mp_ptr qp, mp_size_t qxn, - mp_srcptr np, mp_size_t nn, - mp_limb_t d) -#else -mpn_divrem_1 (qp, qxn, np, nn, d) - mp_ptr qp; - mp_size_t qxn; - mp_srcptr np; - mp_size_t nn; - mp_limb_t d; -#endif -{ - mp_limb_t rlimb; - mp_size_t i; - - /* Develop integer part of quotient. */ - rlimb = __gmpn_divmod_1_internal (qp + qxn, np, nn, d); - - /* Develop fraction part of quotient. This is not as fast as it should; - the preinvert stuff from __gmpn_divmod_1_internal ought to be used here - too. */ - if (UDIV_NEEDS_NORMALIZATION) - { - int normalization_steps; - - count_leading_zeros (normalization_steps, d); - if (normalization_steps != 0) - { - d <<= normalization_steps; - rlimb <<= normalization_steps; - - for (i = qxn - 1; i >= 0; i--) - udiv_qrnnd (qp[i], rlimb, rlimb, 0, d); - - return rlimb >> normalization_steps; - } - else - /* fall out */ - ; - } - - for (i = qxn - 1; i >= 0; i--) - udiv_qrnnd (qp[i], rlimb, rlimb, 0, d); - - return rlimb; -} diff --git a/rts/gmp/mpn/generic/divrem_2.c b/rts/gmp/mpn/generic/divrem_2.c deleted file mode 100644 index 0bc31ae..0000000 --- a/rts/gmp/mpn/generic/divrem_2.c +++ /dev/null @@ -1,151 +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 (C) 1993, 1994, 1995, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Divide num (NP/NSIZE) by den (DP/2) and write - the NSIZE-2 least significant quotient limbs at QP - and the 2 long remainder at NP. If QEXTRA_LIMBS 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: - 0. NSIZE >= 2. - 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 + 2 >= NP must hold true. (This means that it's - possible to put the quotient in the high part of NUM, right after the - remainder in NUM. - 3. NSIZE >= 2, even if QEXTRA_LIMBS is non-zero. */ - -mp_limb_t -#if __STDC__ -mpn_divrem_2 (mp_ptr qp, mp_size_t qxn, - mp_ptr np, mp_size_t nsize, - mp_srcptr dp) -#else -mpn_divrem_2 (qp, qxn, np, nsize, dp) - mp_ptr qp; - mp_size_t qxn; - mp_ptr np; - mp_size_t nsize; - mp_srcptr dp; -#endif -{ - mp_limb_t most_significant_q_limb = 0; - mp_size_t i; - mp_limb_t n1, n0, n2; - mp_limb_t d1, d0; - mp_limb_t d1inv; - int have_preinv; - - np += nsize - 2; - d1 = dp[1]; - d0 = dp[0]; - n1 = np[1]; - n0 = np[0]; - - if (n1 >= d1 && (n1 > d1 || n0 >= d0)) - { - sub_ddmmss (n1, n0, n1, n0, d1, d0); - most_significant_q_limb = 1; - } - - /* If multiplication is much faster than division, preinvert the most - significant divisor limb before entering the loop. */ - if (UDIV_TIME > 2 * UMUL_TIME + 6) - { - have_preinv = 0; - if ((UDIV_TIME - (2 * UMUL_TIME + 6)) * (nsize - 2) > UDIV_TIME) - { - invert_limb (d1inv, d1); - have_preinv = 1; - } - } - - for (i = qxn + nsize - 2 - 1; i >= 0; i--) - { - mp_limb_t q; - mp_limb_t r; - - if (i >= qxn) - np--; - else - np[0] = 0; - - if (n1 == d1) - { - /* Q should be either 111..111 or 111..110. Need special treatment - of this rare case as normal division would give overflow. */ - q = ~(mp_limb_t) 0; - - r = n0 + d1; - if (r < d1) /* Carry in the addition? */ - { - add_ssaaaa (n1, n0, r - d0, np[0], 0, d0); - qp[i] = q; - continue; - } - n1 = d0 - (d0 != 0); - n0 = -d0; - } - else - { - if (UDIV_TIME > 2 * UMUL_TIME + 6 && have_preinv) - udiv_qrnnd_preinv (q, r, n1, n0, d1, d1inv); - else - udiv_qrnnd (q, r, n1, n0, d1); - umul_ppmm (n1, n0, d0, q); - } - - n2 = np[0]; - - q_test: - if (n1 > r || (n1 == r && n0 > n2)) - { - /* The estimated Q was too large. */ - q--; - - sub_ddmmss (n1, n0, n1, n0, 0, d0); - r += d1; - if (r >= d1) /* If not carry, test Q again. */ - goto q_test; - } - - qp[i] = q; - sub_ddmmss (n1, n0, r, n2, n1, n0); - } - np[1] = n1; - np[0] = n0; - - return most_significant_q_limb; -} diff --git a/rts/gmp/mpn/generic/dump.c b/rts/gmp/mpn/generic/dump.c deleted file mode 100644 index 66f375c..0000000 --- a/rts/gmp/mpn/generic/dump.c +++ /dev/null @@ -1,76 +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 (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpn_dump (mp_srcptr ptr, mp_size_t size) -#else -mpn_dump (ptr, size) - mp_srcptr ptr; - mp_size_t size; -#endif -{ - MPN_NORMALIZE (ptr, size); - - if (size == 0) - printf ("0\n"); - else - { - size--; - if (BYTES_PER_MP_LIMB > sizeof (long)) - { - if ((ptr[size] >> BITS_PER_MP_LIMB/2) != 0) - { - printf ("%lX", - (unsigned long) (ptr[size] >> BITS_PER_MP_LIMB/2)); - printf ("%0*lX", (int) (BYTES_PER_MP_LIMB), - (unsigned long) ptr[size]); - } - else - printf ("%lX", (unsigned long) ptr[size]); - } - else - printf ("%lX", ptr[size]); - - while (size) - { - size--; - if (BYTES_PER_MP_LIMB > sizeof (long)) - { - printf ("%0*lX", (int) (BYTES_PER_MP_LIMB), - (unsigned long) (ptr[size] >> BITS_PER_MP_LIMB/2)); - printf ("%0*lX", (int) (BYTES_PER_MP_LIMB), - (unsigned long) ptr[size]); - } - else - printf ("%0*lX", (int) (2 * BYTES_PER_MP_LIMB), ptr[size]); - } - printf ("\n"); - } -} diff --git a/rts/gmp/mpn/generic/gcd.c b/rts/gmp/mpn/generic/gcd.c deleted file mode 100644 index 059e219..0000000 --- a/rts/gmp/mpn/generic/gcd.c +++ /dev/null @@ -1,414 +0,0 @@ -/* mpn/gcd.c: mpn_gcd for gcd of two odd integers. - -Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* Integer greatest common divisor of two unsigned integers, using - the accelerated algorithm (see reference below). - - mp_size_t mpn_gcd (up, usize, vp, vsize). - - Preconditions [U = (up, usize) and V = (vp, vsize)]: - - 1. V is odd. - 2. numbits(U) >= numbits(V). - - Both U and V are destroyed by the operation. The result is left at vp, - and its size is returned. - - Ken Weber (kweber@mat.ufrgs.br, kweber@mcs.kent.edu) - - Funding for this work has been partially provided by Conselho Nacional - de Desenvolvimento Cienti'fico e Tecnolo'gico (CNPq) do Brazil, Grant - 301314194-2, and was done while I was a visiting reseacher in the Instituto - de Matema'tica at Universidade Federal do Rio Grande do Sul (UFRGS). - - Refer to - K. Weber, The accelerated integer GCD algorithm, ACM Transactions on - Mathematical Software, v. 21 (March), 1995, pp. 111-122. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* If MIN (usize, vsize) >= GCD_ACCEL_THRESHOLD, then the accelerated - algorithm is used, otherwise the binary algorithm is used. This may be - adjusted for different architectures. */ -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 5 -#endif - -/* When U and V differ in size by more than BMOD_THRESHOLD, the accelerated - algorithm reduces using the bmod operation. Otherwise, the k-ary reduction - is used. 0 <= BMOD_THRESHOLD < BITS_PER_MP_LIMB. */ -enum - { - BMOD_THRESHOLD = BITS_PER_MP_LIMB/2 - }; - - -/* Use binary algorithm to compute V <-- GCD (V, U) for usize, vsize == 2. - Both U and V must be odd. */ -static __gmp_inline mp_size_t -#if __STDC__ -gcd_2 (mp_ptr vp, mp_srcptr up) -#else -gcd_2 (vp, up) - mp_ptr vp; - mp_srcptr up; -#endif -{ - mp_limb_t u0, u1, v0, v1; - mp_size_t vsize; - - u0 = up[0], u1 = up[1], v0 = vp[0], v1 = vp[1]; - - while (u1 != v1 && u0 != v0) - { - unsigned long int r; - if (u1 > v1) - { - u1 -= v1 + (u0 < v0), u0 -= v0; - count_trailing_zeros (r, u0); - u0 = u1 << (BITS_PER_MP_LIMB - r) | u0 >> r; - u1 >>= r; - } - else /* u1 < v1. */ - { - v1 -= u1 + (v0 < u0), v0 -= u0; - count_trailing_zeros (r, v0); - v0 = v1 << (BITS_PER_MP_LIMB - r) | v0 >> r; - v1 >>= r; - } - } - - vp[0] = v0, vp[1] = v1, vsize = 1 + (v1 != 0); - - /* If U == V == GCD, done. Otherwise, compute GCD (V, |U - V|). */ - if (u1 == v1 && u0 == v0) - return vsize; - - v0 = (u0 == v0) ? (u1 > v1) ? u1-v1 : v1-u1 : (u0 > v0) ? u0-v0 : v0-u0; - vp[0] = mpn_gcd_1 (vp, vsize, v0); - - return 1; -} - -/* The function find_a finds 0 < N < 2^BITS_PER_MP_LIMB such that there exists - 0 < |D| < 2^BITS_PER_MP_LIMB, and N == D * C mod 2^(2*BITS_PER_MP_LIMB). - In the reference article, D was computed along with N, but it is better to - compute D separately as D <-- N / C mod 2^(BITS_PER_MP_LIMB + 1), treating - the result as a twos' complement signed integer. - - Initialize N1 to C mod 2^(2*BITS_PER_MP_LIMB). According to the reference - article, N2 should be initialized to 2^(2*BITS_PER_MP_LIMB), but we use - 2^(2*BITS_PER_MP_LIMB) - N1 to start the calculations within double - precision. If N2 > N1 initially, the first iteration of the while loop - will swap them. In all other situations, N1 >= N2 is maintained. */ - -static -#if ! defined (__i386__) -__gmp_inline /* don't inline this for the x86 */ -#endif -mp_limb_t -#if __STDC__ -find_a (mp_srcptr cp) -#else -find_a (cp) - mp_srcptr cp; -#endif -{ - unsigned long int leading_zero_bits = 0; - - mp_limb_t n1_l = cp[0]; /* N1 == n1_h * 2^BITS_PER_MP_LIMB + n1_l. */ - mp_limb_t n1_h = cp[1]; - - mp_limb_t n2_l = -n1_l; /* N2 == n2_h * 2^BITS_PER_MP_LIMB + n2_l. */ - mp_limb_t n2_h = ~n1_h; - - /* Main loop. */ - while (n2_h) /* While N2 >= 2^BITS_PER_MP_LIMB. */ - { - /* N1 <-- N1 % N2. */ - if ((MP_LIMB_T_HIGHBIT >> leading_zero_bits & n2_h) == 0) - { - unsigned long int i; - count_leading_zeros (i, n2_h); - i -= leading_zero_bits, leading_zero_bits += i; - n2_h = n2_h<>(BITS_PER_MP_LIMB - i), n2_l <<= i; - do - { - if (n1_h > n2_h || (n1_h == n2_h && n1_l >= n2_l)) - n1_h -= n2_h + (n1_l < n2_l), n1_l -= n2_l; - n2_l = n2_l>>1 | n2_h<<(BITS_PER_MP_LIMB - 1), n2_h >>= 1; - i -= 1; - } - while (i); - } - if (n1_h > n2_h || (n1_h == n2_h && n1_l >= n2_l)) - n1_h -= n2_h + (n1_l < n2_l), n1_l -= n2_l; - - MP_LIMB_T_SWAP (n1_h, n2_h); - MP_LIMB_T_SWAP (n1_l, n2_l); - } - - return n2_l; -} - -mp_size_t -#if __STDC__ -mpn_gcd (mp_ptr gp, mp_ptr up, mp_size_t usize, mp_ptr vp, mp_size_t vsize) -#else -mpn_gcd (gp, up, usize, vp, vsize) - mp_ptr gp; - mp_ptr up; - mp_size_t usize; - mp_ptr vp; - mp_size_t vsize; -#endif -{ - mp_ptr orig_vp = vp; - mp_size_t orig_vsize = vsize; - int binary_gcd_ctr; /* Number of times binary gcd will execute. */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* Use accelerated algorithm if vsize is over GCD_ACCEL_THRESHOLD. - Two EXTRA limbs for U and V are required for kary reduction. */ - if (vsize >= GCD_ACCEL_THRESHOLD) - { - unsigned long int vbitsize, d; - mp_ptr orig_up = up; - mp_size_t orig_usize = usize; - mp_ptr anchor_up = (mp_ptr) TMP_ALLOC ((usize + 2) * BYTES_PER_MP_LIMB); - - MPN_COPY (anchor_up, orig_up, usize); - up = anchor_up; - - count_leading_zeros (d, up[usize-1]); - d = usize * BITS_PER_MP_LIMB - d; - count_leading_zeros (vbitsize, vp[vsize-1]); - vbitsize = vsize * BITS_PER_MP_LIMB - vbitsize; - d = d - vbitsize + 1; - - /* Use bmod reduction to quickly discover whether V divides U. */ - up[usize++] = 0; /* Insert leading zero. */ - mpn_bdivmod (up, up, usize, vp, vsize, d); - - /* Now skip U/V mod 2^d and any low zero limbs. */ - d /= BITS_PER_MP_LIMB, up += d, usize -= d; - while (usize != 0 && up[0] == 0) - up++, usize--; - - if (usize == 0) /* GCD == ORIG_V. */ - goto done; - - vp = (mp_ptr) TMP_ALLOC ((vsize + 2) * BYTES_PER_MP_LIMB); - MPN_COPY (vp, orig_vp, vsize); - - do /* Main loop. */ - { - /* mpn_com_n can't be used here because anchor_up and up may - partially overlap */ - if (up[usize-1] & MP_LIMB_T_HIGHBIT) /* U < 0; take twos' compl. */ - { - mp_size_t i; - anchor_up[0] = -up[0]; - for (i = 1; i < usize; i++) - anchor_up[i] = ~up[i]; - up = anchor_up; - } - - MPN_NORMALIZE_NOT_ZERO (up, usize); - - if ((up[0] & 1) == 0) /* Result even; remove twos. */ - { - unsigned int r; - count_trailing_zeros (r, up[0]); - mpn_rshift (anchor_up, up, usize, r); - usize -= (anchor_up[usize-1] == 0); - } - else if (anchor_up != up) - MPN_COPY_INCR (anchor_up, up, usize); - - MPN_PTR_SWAP (anchor_up,usize, vp,vsize); - up = anchor_up; - - if (vsize <= 2) /* Kary can't handle < 2 limbs and */ - break; /* isn't efficient for == 2 limbs. */ - - d = vbitsize; - count_leading_zeros (vbitsize, vp[vsize-1]); - vbitsize = vsize * BITS_PER_MP_LIMB - vbitsize; - d = d - vbitsize + 1; - - if (d > BMOD_THRESHOLD) /* Bmod reduction. */ - { - up[usize++] = 0; - mpn_bdivmod (up, up, usize, vp, vsize, d); - d /= BITS_PER_MP_LIMB, up += d, usize -= d; - } - else /* Kary reduction. */ - { - mp_limb_t bp[2], cp[2]; - - /* C <-- V/U mod 2^(2*BITS_PER_MP_LIMB). */ - { - mp_limb_t u_inv, hi, lo; - modlimb_invert (u_inv, up[0]); - cp[0] = vp[0] * u_inv; - umul_ppmm (hi, lo, cp[0], up[0]); - cp[1] = (vp[1] - hi - cp[0] * up[1]) * u_inv; - } - - /* U <-- find_a (C) * U. */ - up[usize] = mpn_mul_1 (up, up, usize, find_a (cp)); - usize++; - - /* B <-- A/C == U/V mod 2^(BITS_PER_MP_LIMB + 1). - bp[0] <-- U/V mod 2^BITS_PER_MP_LIMB and - bp[1] <-- ( (U - bp[0] * V)/2^BITS_PER_MP_LIMB ) / V mod 2 - - Like V/U above, but simplified because only the low bit of - bp[1] is wanted. */ - { - mp_limb_t v_inv, hi, lo; - modlimb_invert (v_inv, vp[0]); - bp[0] = up[0] * v_inv; - umul_ppmm (hi, lo, bp[0], vp[0]); - bp[1] = (up[1] + hi + (bp[0]&vp[1])) & 1; - } - - up[usize++] = 0; - if (bp[1]) /* B < 0: U <-- U + (-B) * V. */ - { - mp_limb_t c = mpn_addmul_1 (up, vp, vsize, -bp[0]); - mpn_add_1 (up + vsize, up + vsize, usize - vsize, c); - } - else /* B >= 0: U <-- U - B * V. */ - { - mp_limb_t b = mpn_submul_1 (up, vp, vsize, bp[0]); - mpn_sub_1 (up + vsize, up + vsize, usize - vsize, b); - } - - up += 2, usize -= 2; /* At least two low limbs are zero. */ - } - - /* Must remove low zero limbs before complementing. */ - while (usize != 0 && up[0] == 0) - up++, usize--; - } - while (usize); - - /* Compute GCD (ORIG_V, GCD (ORIG_U, V)). Binary will execute twice. */ - up = orig_up, usize = orig_usize; - binary_gcd_ctr = 2; - } - else - binary_gcd_ctr = 1; - - /* Finish up with the binary algorithm. Executes once or twice. */ - for ( ; binary_gcd_ctr--; up = orig_vp, usize = orig_vsize) - { - if (usize > 2) /* First make U close to V in size. */ - { - unsigned long int vbitsize, d; - count_leading_zeros (d, up[usize-1]); - d = usize * BITS_PER_MP_LIMB - d; - count_leading_zeros (vbitsize, vp[vsize-1]); - vbitsize = vsize * BITS_PER_MP_LIMB - vbitsize; - d = d - vbitsize - 1; - if (d != -(unsigned long int)1 && d > 2) - { - mpn_bdivmod (up, up, usize, vp, vsize, d); /* Result > 0. */ - d /= (unsigned long int)BITS_PER_MP_LIMB, up += d, usize -= d; - } - } - - /* Start binary GCD. */ - do - { - mp_size_t zeros; - - /* Make sure U is odd. */ - MPN_NORMALIZE (up, usize); - while (up[0] == 0) - up += 1, usize -= 1; - if ((up[0] & 1) == 0) - { - unsigned int r; - count_trailing_zeros (r, up[0]); - mpn_rshift (up, up, usize, r); - usize -= (up[usize-1] == 0); - } - - /* Keep usize >= vsize. */ - if (usize < vsize) - MPN_PTR_SWAP (up, usize, vp, vsize); - - if (usize <= 2) /* Double precision. */ - { - if (vsize == 1) - vp[0] = mpn_gcd_1 (up, usize, vp[0]); - else - vsize = gcd_2 (vp, up); - break; /* Binary GCD done. */ - } - - /* Count number of low zero limbs of U - V. */ - for (zeros = 0; up[zeros] == vp[zeros] && ++zeros != vsize; ) - continue; - - /* If U < V, swap U and V; in any case, subtract V from U. */ - if (zeros == vsize) /* Subtract done. */ - up += zeros, usize -= zeros; - else if (usize == vsize) - { - mp_size_t size = vsize; - do - size--; - while (up[size] == vp[size]); - if (up[size] < vp[size]) /* usize == vsize. */ - MP_PTR_SWAP (up, vp); - up += zeros, usize = size + 1 - zeros; - mpn_sub_n (up, up, vp + zeros, usize); - } - else - { - mp_size_t size = vsize - zeros; - up += zeros, usize -= zeros; - if (mpn_sub_n (up, up, vp + zeros, size)) - { - while (up[size] == 0) /* Propagate borrow. */ - up[size++] = -(mp_limb_t)1; - up[size] -= 1; - } - } - } - while (usize); /* End binary GCD. */ - } - -done: - if (vp != gp) - MPN_COPY (gp, vp, vsize); - TMP_FREE (marker); - return vsize; -} diff --git a/rts/gmp/mpn/generic/gcd_1.c b/rts/gmp/mpn/generic/gcd_1.c deleted file mode 100644 index 1832636..0000000 --- a/rts/gmp/mpn/generic/gcd_1.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpn_gcd_1 -- - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* 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. */ - -mp_limb_t -#if __STDC__ -mpn_gcd_1 (mp_srcptr up, mp_size_t size, mp_limb_t vlimb) -#else -mpn_gcd_1 (up, size, vlimb) - mp_srcptr up; - mp_size_t size; - mp_limb_t vlimb; -#endif -{ - mp_limb_t ulimb; - unsigned long int u_low_zero_bits, v_low_zero_bits; - - if (size > 1) - { - ulimb = mpn_mod_1 (up, size, vlimb); - if (ulimb == 0) - return vlimb; - } - else - ulimb = up[0]; - - /* Need to eliminate low zero bits. */ - count_trailing_zeros (u_low_zero_bits, ulimb); - ulimb >>= u_low_zero_bits; - - count_trailing_zeros (v_low_zero_bits, vlimb); - vlimb >>= v_low_zero_bits; - - while (ulimb != vlimb) - { - if (ulimb > vlimb) - { - ulimb -= vlimb; - do - ulimb >>= 1; - while ((ulimb & 1) == 0); - } - else /* vlimb > ulimb. */ - { - vlimb -= ulimb; - do - vlimb >>= 1; - while ((vlimb & 1) == 0); - } - } - - return ulimb << MIN (u_low_zero_bits, v_low_zero_bits); -} diff --git a/rts/gmp/mpn/generic/gcdext.c b/rts/gmp/mpn/generic/gcdext.c deleted file mode 100644 index fe22d77..0000000 --- a/rts/gmp/mpn/generic/gcdext.c +++ /dev/null @@ -1,700 +0,0 @@ -/* mpn_gcdext -- Extended Greatest Common Divisor. - -Copyright (C) 1996, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 17 -#endif - -#ifndef EXTEND -#define EXTEND 1 -#endif - -#if STAT -int arr[BITS_PER_MP_LIMB]; -#endif - - -/* mpn_gcdext (GP, SP, SSIZE, UP, USIZE, VP, VSIZE) - - Compute the extended GCD of {UP,USIZE} and {VP,VSIZE} and store the - greatest common divisor at GP (unless it is 0), and the first cofactor at - SP. Write the size of the cofactor through the pointer SSIZE. Return the - size of the value at GP. Note that SP might be a negative number; this is - denoted by storing the negative of the size through SSIZE. - - {UP,USIZE} and {VP,VSIZE} are both clobbered. - - The space allocation for all four areas needs to be USIZE+1. - - Preconditions: 1) U >= V. - 2) V > 0. */ - -/* We use Lehmer's algorithm. The idea is to extract the most significant - bits of the operands, and compute the continued fraction for them. We then - apply the gathered cofactors to the full operands. - - Idea 1: After we have performed a full division, don't shift operands back, - but instead account for the extra factors-of-2 thus introduced. - Idea 2: Simple generalization to use divide-and-conquer would give us an - algorithm that runs faster than O(n^2). - Idea 3: The input numbers need less space as the computation progresses, - while the s0 and s1 variables need more space. To save memory, we - could make them share space, and have the latter variables grow - into the former. - Idea 4: We should not do double-limb arithmetic from the start. Instead, - do things in single-limb arithmetic until the quotients differ, - and then switch to double-limb arithmetic. */ - - -/* Division optimized for small quotients. If the quotient is more than one limb, - store 1 in *qh and return 0. */ -static mp_limb_t -#if __STDC__ -div2 (mp_limb_t *qh, mp_limb_t n1, mp_limb_t n0, mp_limb_t d1, mp_limb_t d0) -#else -div2 (qh, n1, n0, d1, d0) - mp_limb_t *qh; - mp_limb_t n1; - mp_limb_t n0; - mp_limb_t d1; - mp_limb_t d0; -#endif -{ - if (d1 == 0) - { - *qh = 1; - return 0; - } - - if ((mp_limb_signed_t) n1 < 0) - { - mp_limb_t q; - int cnt; - for (cnt = 1; (mp_limb_signed_t) d1 >= 0; cnt++) - { - d1 = (d1 << 1) | (d0 >> (BITS_PER_MP_LIMB - 1)); - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - q <<= 1; - if (n1 > d1 || (n1 == d1 && n0 >= d0)) - { - sub_ddmmss (n1, n0, n1, n0, d1, d0); - q |= 1; - } - d0 = (d1 << (BITS_PER_MP_LIMB - 1)) | (d0 >> 1); - d1 = d1 >> 1; - cnt--; - } - - *qh = 0; - return q; - } - else - { - mp_limb_t q; - int cnt; - for (cnt = 0; n1 > d1 || (n1 == d1 && n0 >= d0); cnt++) - { - d1 = (d1 << 1) | (d0 >> (BITS_PER_MP_LIMB - 1)); - d0 = d0 << 1; - } - - q = 0; - while (cnt) - { - d0 = (d1 << (BITS_PER_MP_LIMB - 1)) | (d0 >> 1); - d1 = d1 >> 1; - q <<= 1; - if (n1 > d1 || (n1 == d1 && n0 >= d0)) - { - sub_ddmmss (n1, n0, n1, n0, d1, d0); - q |= 1; - } - cnt--; - } - - *qh = 0; - return q; - } -} - -mp_size_t -#if EXTEND -#if __STDC__ -mpn_gcdext (mp_ptr gp, mp_ptr s0p, mp_size_t *s0size, - mp_ptr up, mp_size_t size, mp_ptr vp, mp_size_t vsize) -#else -mpn_gcdext (gp, s0p, s0size, up, size, vp, vsize) - mp_ptr gp; - mp_ptr s0p; - mp_size_t *s0size; - mp_ptr up; - mp_size_t size; - mp_ptr vp; - mp_size_t vsize; -#endif -#else -#if __STDC__ -mpn_gcd (mp_ptr gp, - mp_ptr up, mp_size_t size, mp_ptr vp, mp_size_t vsize) -#else -mpn_gcd (gp, up, size, vp, vsize) - mp_ptr gp; - mp_ptr up; - mp_size_t size; - mp_ptr vp; - mp_size_t vsize; -#endif -#endif -{ - mp_limb_t A, B, C, D; - int cnt; - mp_ptr tp, wp; -#if RECORD - mp_limb_t max = 0; -#endif -#if EXTEND - mp_ptr s1p; - mp_ptr orig_s0p = s0p; - mp_size_t ssize; - int sign = 1; -#endif - int use_double_flag; - TMP_DECL (mark); - - TMP_MARK (mark); - - use_double_flag = (size >= GCDEXT_THRESHOLD); - - tp = (mp_ptr) TMP_ALLOC ((size + 1) * BYTES_PER_MP_LIMB); - wp = (mp_ptr) TMP_ALLOC ((size + 1) * BYTES_PER_MP_LIMB); -#if EXTEND - s1p = (mp_ptr) TMP_ALLOC ((size + 1) * BYTES_PER_MP_LIMB); - - MPN_ZERO (s0p, size); - MPN_ZERO (s1p, size); - - s0p[0] = 1; - s1p[0] = 0; - ssize = 1; -#endif - - if (size > vsize) - { - /* Normalize V (and shift up U the same amount). */ - count_leading_zeros (cnt, vp[vsize - 1]); - if (cnt != 0) - { - mp_limb_t cy; - mpn_lshift (vp, vp, vsize, cnt); - cy = mpn_lshift (up, up, size, cnt); - up[size] = cy; - size += cy != 0; - } - - mpn_divmod (up + vsize, up, size, vp, vsize); -#if EXTEND - /* This is really what it boils down to in this case... */ - s0p[0] = 0; - s1p[0] = 1; - sign = -sign; -#endif - size = vsize; - if (cnt != 0) - { - mpn_rshift (up, up, size, cnt); - mpn_rshift (vp, vp, size, cnt); - } - MP_PTR_SWAP (up, vp); - } - - for (;;) - { - mp_limb_t asign; - /* Figure out exact size of V. */ - vsize = size; - MPN_NORMALIZE (vp, vsize); - if (vsize <= 1) - break; - - if (use_double_flag) - { - mp_limb_t uh, vh, ul, vl; - /* Let UH,UL be the most significant limbs of U, and let VH,VL be - the corresponding bits from V. */ - uh = up[size - 1]; - vh = vp[size - 1]; - ul = up[size - 2]; - vl = vp[size - 2]; - count_leading_zeros (cnt, uh); - if (cnt != 0) - { - uh = (uh << cnt) | (ul >> (BITS_PER_MP_LIMB - cnt)); - vh = (vh << cnt) | (vl >> (BITS_PER_MP_LIMB - cnt)); - vl <<= cnt; - ul <<= cnt; - if (size >= 3) - { - ul |= (up[size - 3] >> (BITS_PER_MP_LIMB - cnt)); - vl |= (vp[size - 3] >> (BITS_PER_MP_LIMB - cnt)); - } - } - - A = 1; - B = 0; - C = 0; - D = 1; - - asign = 0; - for (;;) - { - mp_limb_t T; - mp_limb_t qh, q1, q2; - mp_limb_t nh, nl, dh, dl; - mp_limb_t t1, t0; - mp_limb_t Th, Tl; - - sub_ddmmss (dh, dl, vh, vl, 0, C); - if ((dl | dh) == 0) - break; - add_ssaaaa (nh, nl, uh, ul, 0, A); - q1 = div2 (&qh, nh, nl, dh, dl); - if (qh != 0) - break; /* could handle this */ - - add_ssaaaa (dh, dl, vh, vl, 0, D); - if ((dl | dh) == 0) - break; - sub_ddmmss (nh, nl, uh, ul, 0, B); - q2 = div2 (&qh, nh, nl, dh, dl); - if (qh != 0) - break; /* could handle this */ - - if (q1 != q2) - break; - - asign = ~asign; - - T = A + q1 * C; - A = C; - C = T; - T = B + q1 * D; - B = D; - D = T; - umul_ppmm (t1, t0, q1, vl); - t1 += q1 * vh; - sub_ddmmss (Th, Tl, uh, ul, t1, t0); - uh = vh, ul = vl; - vh = Th, vl = Tl; - - add_ssaaaa (dh, dl, vh, vl, 0, C); - sub_ddmmss (nh, nl, uh, ul, 0, A); - q1 = div2 (&qh, nh, nl, dh, dl); - if (qh != 0) - break; /* could handle this */ - - sub_ddmmss (dh, dl, vh, vl, 0, D); - if ((dl | dh) == 0) - break; - add_ssaaaa (nh, nl, uh, ul, 0, B); - q2 = div2 (&qh, nh, nl, dh, dl); - if (qh != 0) - break; /* could handle this */ - - if (q1 != q2) - break; - - asign = ~asign; - - T = A + q1 * C; - A = C; - C = T; - T = B + q1 * D; - B = D; - D = T; - umul_ppmm (t1, t0, q1, vl); - t1 += q1 * vh; - sub_ddmmss (Th, Tl, uh, ul, t1, t0); - uh = vh, ul = vl; - vh = Th, vl = Tl; - } -#if EXTEND - if (asign) - sign = -sign; -#endif - } - else /* Same, but using single-limb calculations. */ - { - mp_limb_t uh, vh; - /* Make UH be the most significant limb of U, and make VH be - corresponding bits from V. */ - uh = up[size - 1]; - vh = vp[size - 1]; - count_leading_zeros (cnt, uh); - if (cnt != 0) - { - uh = (uh << cnt) | (up[size - 2] >> (BITS_PER_MP_LIMB - cnt)); - vh = (vh << cnt) | (vp[size - 2] >> (BITS_PER_MP_LIMB - cnt)); - } - - A = 1; - B = 0; - C = 0; - D = 1; - - asign = 0; - for (;;) - { - mp_limb_t q, T; - if (vh - C == 0 || vh + D == 0) - break; - - q = (uh + A) / (vh - C); - if (q != (uh - B) / (vh + D)) - break; - - asign = ~asign; - - T = A + q * C; - A = C; - C = T; - T = B + q * D; - B = D; - D = T; - T = uh - q * vh; - uh = vh; - vh = T; - - if (vh - D == 0) - break; - - q = (uh - A) / (vh + C); - if (q != (uh + B) / (vh - D)) - break; - - asign = ~asign; - - T = A + q * C; - A = C; - C = T; - T = B + q * D; - B = D; - D = T; - T = uh - q * vh; - uh = vh; - vh = T; - } -#if EXTEND - if (asign) - sign = -sign; -#endif - } - -#if RECORD - max = MAX (A, max); max = MAX (B, max); - max = MAX (C, max); max = MAX (D, max); -#endif - - if (B == 0) - { - mp_limb_t qh; - mp_size_t i; - /* This is quite rare. I.e., optimize something else! */ - - /* Normalize V (and shift up U the same amount). */ - count_leading_zeros (cnt, vp[vsize - 1]); - if (cnt != 0) - { - mp_limb_t cy; - mpn_lshift (vp, vp, vsize, cnt); - cy = mpn_lshift (up, up, size, cnt); - up[size] = cy; - size += cy != 0; - } - - qh = mpn_divmod (up + vsize, up, size, vp, vsize); -#if EXTEND - MPN_COPY (tp, s0p, ssize); - { - mp_size_t qsize; - - qsize = size - vsize; /* size of stored quotient from division */ - if (ssize < qsize) - { - MPN_ZERO (tp + ssize, qsize - ssize); - MPN_ZERO (s1p + ssize, qsize); /* zero s1 too */ - for (i = 0; i < ssize; i++) - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp + i, up + vsize, qsize, s1p[i]); - tp[qsize + i] = cy; - } - if (qh != 0) - { - mp_limb_t cy; - cy = mpn_add_n (tp + qsize, tp + qsize, s1p, ssize); - if (cy != 0) - abort (); - } - } - else - { - MPN_ZERO (s1p + ssize, qsize); /* zero s1 too */ - for (i = 0; i < qsize; i++) - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp + i, s1p, ssize, up[vsize + i]); - tp[ssize + i] = cy; - } - if (qh != 0) - { - mp_limb_t cy; - cy = mpn_add_n (tp + qsize, tp + qsize, s1p, ssize); - if (cy != 0) - { - tp[qsize + ssize] = cy; - s1p[qsize + ssize] = 0; - ssize++; - } - } - } - ssize += qsize; - ssize -= tp[ssize - 1] == 0; - } - - sign = -sign; - MP_PTR_SWAP (s0p, s1p); - MP_PTR_SWAP (s1p, tp); -#endif - size = vsize; - if (cnt != 0) - { - mpn_rshift (up, up, size, cnt); - mpn_rshift (vp, vp, size, cnt); - } - MP_PTR_SWAP (up, vp); - } - else - { -#if EXTEND - mp_size_t tsize, wsize; -#endif - /* T = U*A + V*B - W = U*C + V*D - U = T - V = W */ - -#if STAT - { mp_limb_t x; x = A | B | C | D; count_leading_zeros (cnt, x); - arr[BITS_PER_MP_LIMB - cnt]++; } -#endif - if (A == 0) - { - /* B == 1 and C == 1 (D is arbitrary) */ - mp_limb_t cy; - MPN_COPY (tp, vp, size); - MPN_COPY (wp, up, size); - mpn_submul_1 (wp, vp, size, D); - MP_PTR_SWAP (tp, up); - MP_PTR_SWAP (wp, vp); -#if EXTEND - MPN_COPY (tp, s1p, ssize); - tsize = ssize; - tp[ssize] = 0; /* must zero since wp might spill below */ - MPN_COPY (wp, s0p, ssize); - cy = mpn_addmul_1 (wp, s1p, ssize, D); - wp[ssize] = cy; - wsize = ssize + (cy != 0); - MP_PTR_SWAP (tp, s0p); - MP_PTR_SWAP (wp, s1p); - ssize = MAX (wsize, tsize); -#endif - } - else - { - if (asign) - { - mp_limb_t cy; - mpn_mul_1 (tp, vp, size, B); - mpn_submul_1 (tp, up, size, A); - mpn_mul_1 (wp, up, size, C); - mpn_submul_1 (wp, vp, size, D); - MP_PTR_SWAP (tp, up); - MP_PTR_SWAP (wp, vp); -#if EXTEND - cy = mpn_mul_1 (tp, s1p, ssize, B); - cy += mpn_addmul_1 (tp, s0p, ssize, A); - tp[ssize] = cy; - tsize = ssize + (cy != 0); - cy = mpn_mul_1 (wp, s0p, ssize, C); - cy += mpn_addmul_1 (wp, s1p, ssize, D); - wp[ssize] = cy; - wsize = ssize + (cy != 0); - MP_PTR_SWAP (tp, s0p); - MP_PTR_SWAP (wp, s1p); - ssize = MAX (wsize, tsize); -#endif - } - else - { - mp_limb_t cy; - mpn_mul_1 (tp, up, size, A); - mpn_submul_1 (tp, vp, size, B); - mpn_mul_1 (wp, vp, size, D); - mpn_submul_1 (wp, up, size, C); - MP_PTR_SWAP (tp, up); - MP_PTR_SWAP (wp, vp); -#if EXTEND - cy = mpn_mul_1 (tp, s0p, ssize, A); - cy += mpn_addmul_1 (tp, s1p, ssize, B); - tp[ssize] = cy; - tsize = ssize + (cy != 0); - cy = mpn_mul_1 (wp, s1p, ssize, D); - cy += mpn_addmul_1 (wp, s0p, ssize, C); - wp[ssize] = cy; - wsize = ssize + (cy != 0); - MP_PTR_SWAP (tp, s0p); - MP_PTR_SWAP (wp, s1p); - ssize = MAX (wsize, tsize); -#endif - } - } - - size -= up[size - 1] == 0; - } - } - -#if RECORD - printf ("max: %lx\n", max); -#endif - -#if STAT - {int i; for (i = 0; i < BITS_PER_MP_LIMB; i++) printf ("%d:%d\n", i, arr[i]);} -#endif - - if (vsize == 0) - { - if (gp != up && gp != 0) - MPN_COPY (gp, up, size); -#if EXTEND - MPN_NORMALIZE (s0p, ssize); - if (orig_s0p != s0p) - MPN_COPY (orig_s0p, s0p, ssize); - *s0size = sign >= 0 ? ssize : -ssize; -#endif - TMP_FREE (mark); - return size; - } - else - { - mp_limb_t vl, ul, t; -#if EXTEND - mp_size_t qsize, i; -#endif - vl = vp[0]; -#if EXTEND - t = mpn_divmod_1 (wp, up, size, vl); - - MPN_COPY (tp, s0p, ssize); - - qsize = size - (wp[size - 1] == 0); /* size of quotient from division */ - if (ssize < qsize) - { - MPN_ZERO (tp + ssize, qsize - ssize); - MPN_ZERO (s1p + ssize, qsize); /* zero s1 too */ - for (i = 0; i < ssize; i++) - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp + i, wp, qsize, s1p[i]); - tp[qsize + i] = cy; - } - } - else - { - MPN_ZERO (s1p + ssize, qsize); /* zero s1 too */ - for (i = 0; i < qsize; i++) - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp + i, s1p, ssize, wp[i]); - tp[ssize + i] = cy; - } - } - ssize += qsize; - ssize -= tp[ssize - 1] == 0; - - sign = -sign; - MP_PTR_SWAP (s0p, s1p); - MP_PTR_SWAP (s1p, tp); -#else - t = mpn_mod_1 (up, size, vl); -#endif - ul = vl; - vl = t; - while (vl != 0) - { - mp_limb_t t; -#if EXTEND - mp_limb_t q; - q = ul / vl; - t = ul - q * vl; - - MPN_COPY (tp, s0p, ssize); - - MPN_ZERO (s1p + ssize, 1); /* zero s1 too */ - - { - mp_limb_t cy; - cy = mpn_addmul_1 (tp, s1p, ssize, q); - tp[ssize] = cy; - } - - ssize += 1; - ssize -= tp[ssize - 1] == 0; - - sign = -sign; - MP_PTR_SWAP (s0p, s1p); - MP_PTR_SWAP (s1p, tp); -#else - t = ul % vl; -#endif - ul = vl; - vl = t; - } - if (gp != 0) - gp[0] = ul; -#if EXTEND - MPN_NORMALIZE (s0p, ssize); - if (orig_s0p != s0p) - MPN_COPY (orig_s0p, s0p, ssize); - *s0size = sign >= 0 ? ssize : -ssize; -#endif - TMP_FREE (mark); - return 1; - } -} diff --git a/rts/gmp/mpn/generic/get_str.c b/rts/gmp/mpn/generic/get_str.c deleted file mode 100644 index a713b61..0000000 --- a/rts/gmp/mpn/generic/get_str.c +++ /dev/null @@ -1,216 +0,0 @@ -/* mpn_get_str -- Convert a MSIZE long limb vector pointed to by MPTR - to a printable string in STR in base BASE. - -Copyright (C) 1991, 1992, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Convert the limb vector pointed to by MPTR and MSIZE long to a - char array, using base BASE for the result array. Store the - result in the character array STR. STR must point to an array with - space for the largest possible number represented by a MSIZE long - limb vector + 1 extra character. - - The result is NOT in Ascii, to convert it to printable format, add - '0' or 'A' depending on the base and range. - - Return the number of digits in the result string. - This may include some leading zeros. - - The limb vector pointed to by MPTR is clobbered. */ - -size_t -#if __STDC__ -mpn_get_str (unsigned char *str, int base, mp_ptr mptr, mp_size_t msize) -#else -mpn_get_str (str, base, mptr, msize) - unsigned char *str; - int base; - mp_ptr mptr; - mp_size_t msize; -#endif -{ - mp_limb_t big_base; -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - int normalization_steps; -#endif -#if UDIV_TIME > 2 * UMUL_TIME - mp_limb_t big_base_inverted; -#endif - unsigned int dig_per_u; - mp_size_t out_len; - register unsigned char *s; - - big_base = __mp_bases[base].big_base; - - s = str; - - /* Special case zero, as the code below doesn't handle it. */ - if (msize == 0) - { - s[0] = 0; - return 1; - } - - if ((base & (base - 1)) == 0) - { - /* The base is a power of 2. Make conversion from most - significant side. */ - mp_limb_t n1, n0; - register int bits_per_digit = big_base; - register int x; - register int bit_pos; - register int i; - - n1 = mptr[msize - 1]; - count_leading_zeros (x, n1); - - /* BIT_POS should be R when input ends in least sign. nibble, - R + bits_per_digit * n when input ends in n:th least significant - nibble. */ - - { - int bits; - - bits = BITS_PER_MP_LIMB * msize - x; - x = bits % bits_per_digit; - if (x != 0) - bits += bits_per_digit - x; - bit_pos = bits - (msize - 1) * BITS_PER_MP_LIMB; - } - - /* Fast loop for bit output. */ - i = msize - 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 = mptr[i]; - bit_pos += BITS_PER_MP_LIMB; - *s++ = n0 | (n1 >> bit_pos); - } - - *s = 0; - - return s - str; - } - else - { - /* General case. The base is not a power of 2. Make conversion - from least significant end. */ - - /* If udiv_qrnnd only handles divisors with the most significant bit - set, prepare BIG_BASE for being a divisor by shifting it to the - left exactly enough to set the most significant bit. */ -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - count_leading_zeros (normalization_steps, big_base); - big_base <<= normalization_steps; -#if UDIV_TIME > 2 * UMUL_TIME - /* Get the fixed-point approximation to 1/(BIG_BASE << NORMALIZATION_STEPS). */ - big_base_inverted = __mp_bases[base].big_base_inverted; -#endif -#endif - - dig_per_u = __mp_bases[base].chars_per_limb; - out_len = ((size_t) msize * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly) + 1; - s += out_len; - - while (msize != 0) - { - int i; - mp_limb_t n0, n1; - -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - /* If we shifted BIG_BASE above, shift the dividend too, to get - the right quotient. We need to do this every loop, - since the intermediate quotients are OK, but the quotient from - one turn in the loop is going to be the dividend in the - next turn, and the dividend needs to be up-shifted. */ - if (normalization_steps != 0) - { - n0 = mpn_lshift (mptr, mptr, msize, normalization_steps); - - /* If the shifting gave a carry out limb, store it and - increase the length. */ - if (n0 != 0) - { - mptr[msize] = n0; - msize++; - } - } -#endif - - /* Divide the number at TP with BIG_BASE to get a quotient and a - remainder. The remainder is our new digit in base BIG_BASE. */ - i = msize - 1; - n1 = mptr[i]; - - if (n1 >= big_base) - n1 = 0; - else - { - msize--; - i--; - } - - for (; i >= 0; i--) - { - n0 = mptr[i]; -#if UDIV_TIME > 2 * UMUL_TIME - udiv_qrnnd_preinv (mptr[i], n1, n1, n0, big_base, big_base_inverted); -#else - udiv_qrnnd (mptr[i], n1, n1, n0, big_base); -#endif - } - -#if UDIV_NEEDS_NORMALIZATION || UDIV_TIME > 2 * UMUL_TIME - /* If we shifted above (at previous UDIV_NEEDS_NORMALIZATION tests) - the remainder will be up-shifted here. Compensate. */ - n1 >>= normalization_steps; -#endif - - /* Convert N1 from BIG_BASE to a string of digits in BASE - using single precision operations. */ - for (i = dig_per_u - 1; i >= 0; i--) - { - *--s = n1 % base; - n1 /= base; - if (n1 == 0 && msize == 0) - break; - } - } - - while (s != str) - *--s = 0; - return out_len; - } -} diff --git a/rts/gmp/mpn/generic/gmp-mparam.h b/rts/gmp/mpn/generic/gmp-mparam.h deleted file mode 100644 index 14bcaec..0000000 --- a/rts/gmp/mpn/generic/gmp-mparam.h +++ /dev/null @@ -1,27 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 diff --git a/rts/gmp/mpn/generic/hamdist.c b/rts/gmp/mpn/generic/hamdist.c deleted file mode 100644 index 35c10e8..0000000 --- a/rts/gmp/mpn/generic/hamdist.c +++ /dev/null @@ -1,94 +0,0 @@ -/* mpn_hamdist -- - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if defined __GNUC__ -/* No processor claiming to be SPARC v9 compliant seem to - implement the POPC instruction. Disable pattern for now. */ -#if 0 && defined __sparc_v9__ && BITS_PER_MP_LIMB == 64 -#define popc_limb(a) \ - ({ \ - DItype __res; \ - asm ("popc %1,%0" : "=r" (__res) : "rI" (a)); \ - __res; \ - }) -#endif -#endif - -#ifndef popc_limb - -/* Cool population count of a mp_limb_t. - You have to figure out how this works, I won't tell you! */ - -static inline unsigned int -#if __STDC__ -popc_limb (mp_limb_t x) -#else -popc_limb (x) - mp_limb_t x; -#endif -{ -#if BITS_PER_MP_LIMB == 64 - /* We have to go into some trouble to define these constants. - (For mp_limb_t being `long long'.) */ - mp_limb_t cnst; - cnst = 0xaaaaaaaaL | ((mp_limb_t) 0xaaaaaaaaL << BITS_PER_MP_LIMB/2); - x -= (x & cnst) >> 1; - cnst = 0x33333333L | ((mp_limb_t) 0x33333333L << BITS_PER_MP_LIMB/2); - x = ((x & ~cnst) >> 2) + (x & cnst); - cnst = 0x0f0f0f0fL | ((mp_limb_t) 0x0f0f0f0fL << BITS_PER_MP_LIMB/2); - x = ((x >> 4) + x) & cnst; - x = ((x >> 8) + x); - x = ((x >> 16) + x); - x = ((x >> 32) + x) & 0xff; -#endif -#if BITS_PER_MP_LIMB == 32 - x -= (x & 0xaaaaaaaa) >> 1; - x = ((x >> 2) & 0x33333333L) + (x & 0x33333333L); - x = ((x >> 4) + x) & 0x0f0f0f0fL; - x = ((x >> 8) + x); - x = ((x >> 16) + x) & 0xff; -#endif - return x; -} -#endif - -unsigned long int -#if __STDC__ -mpn_hamdist (mp_srcptr up, mp_srcptr vp, mp_size_t size) -#else -mpn_hamdist (up, vp, size) - register mp_srcptr up; - register mp_srcptr vp; - register mp_size_t size; -#endif -{ - unsigned long int hamdist; - mp_size_t i; - - hamdist = 0; - for (i = 0; i < size; i++) - hamdist += popc_limb (up[i] ^ vp[i]); - - return hamdist; -} diff --git a/rts/gmp/mpn/generic/inlines.c b/rts/gmp/mpn/generic/inlines.c deleted file mode 100644 index 9487e58..0000000 --- a/rts/gmp/mpn/generic/inlines.c +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#define _FORCE_INLINES -#define _EXTERN_INLINE /* empty */ -#include "gmp.h" diff --git a/rts/gmp/mpn/generic/jacbase.c b/rts/gmp/mpn/generic/jacbase.c deleted file mode 100644 index dd437f1..0000000 --- a/rts/gmp/mpn/generic/jacbase.c +++ /dev/null @@ -1,136 +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 (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -#if COUNT_TRAILING_ZEROS_TIME <= 7 -/* If count_trailing_zeros is fast, use it. - K7 at 7 cycles and P6 at 2 are good here. K6 at 12-27 and P5 at 18-42 - are not. The default 15 in longlong.h is meant to mean not good here. */ - -#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 - -#else -/* Use a loop instead. With "a" uniformly distributed there will usually be - only a few trailing zeros. - - Unfortunately the branch for the while loop here will be on a 50/50 - chance of a 1 or 0, which is bad for branch prediction. */ - -#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 - - -/* 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, and a<=b. - - The initial result_bit1 is taken as a parameter for the convenience of - mpz_kronecker_zi_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. - - Future: The code doesn't demand a<=b actually, so maybe this could be - relaxed. All the places this is used currently call with a<=b though. */ - -int -#if __STDC__ -mpn_jacobi_base (mp_limb_t a, mp_limb_t b, int result_bit1) -#else -mpn_jacobi_base (a, b, result_bit1) - mp_limb_t a; - mp_limb_t b; - int result_bit1; -#endif -{ - ASSERT (b & 1); /* b odd */ - ASSERT (b != 1); - ASSERT (a <= b); - - if (a == 0) - return 0; - - PROCESS_TWOS_ANY; - if (a == 1) - goto done; - - for (;;) - { - result_bit1 ^= JACOBI_RECIP_UU_BIT1 (a, b); - MP_LIMB_T_SWAP (a, 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); -} diff --git a/rts/gmp/mpn/generic/lshift.c b/rts/gmp/mpn/generic/lshift.c deleted file mode 100644 index 0b58389..0000000 --- a/rts/gmp/mpn/generic/lshift.c +++ /dev/null @@ -1,87 +0,0 @@ -/* mpn_lshift -- Shift left low level. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left - and store the USIZE least significant digits of the result at WP. - Return the bits shifted out from the most significant digit. - - Argument constraints: - 1. 0 < CNT < BITS_PER_MP_LIMB - 2. If the result is to be written over the input, WP must be >= UP. -*/ - -mp_limb_t -#if __STDC__ -mpn_lshift (register mp_ptr wp, - register mp_srcptr up, mp_size_t usize, - register unsigned int cnt) -#else -mpn_lshift (wp, up, usize, cnt) - register mp_ptr wp; - register mp_srcptr up; - mp_size_t usize; - register unsigned int cnt; -#endif -{ - register mp_limb_t high_limb, low_limb; - register unsigned sh_1, sh_2; - register mp_size_t i; - mp_limb_t retval; - -#ifdef DEBUG - if (usize == 0 || cnt == 0) - abort (); -#endif - - sh_1 = cnt; -#if 0 - if (sh_1 == 0) - { - if (wp != up) - { - /* Copy from high end to low end, to allow specified input/output - overlapping. */ - for (i = usize - 1; i >= 0; i--) - wp[i] = up[i]; - } - return 0; - } -#endif - - wp += 1; - sh_2 = BITS_PER_MP_LIMB - sh_1; - i = usize - 1; - low_limb = up[i]; - retval = low_limb >> sh_2; - high_limb = low_limb; - while (--i >= 0) - { - low_limb = up[i]; - wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); - high_limb = low_limb; - } - wp[i] = high_limb << sh_1; - - return retval; -} diff --git a/rts/gmp/mpn/generic/mod_1.c b/rts/gmp/mpn/generic/mod_1.c deleted file mode 100644 index 168ec9d..0000000 --- a/rts/gmp/mpn/generic/mod_1.c +++ /dev/null @@ -1,175 +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 (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef UMUL_TIME -#define UMUL_TIME 1 -#endif - -#ifndef UDIV_TIME -#define UDIV_TIME UMUL_TIME -#endif - -mp_limb_t -#if __STDC__ -mpn_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size, - mp_limb_t divisor_limb) -#else -mpn_mod_1 (dividend_ptr, dividend_size, divisor_limb) - mp_srcptr dividend_ptr; - mp_size_t dividend_size; - mp_limb_t divisor_limb; -#endif -{ - mp_size_t i; - mp_limb_t n1, n0, r; - int dummy; - - /* Botch: Should this be handled at all? Rely on callers? */ - if (dividend_size == 0) - return 0; - - /* If multiplication is much faster than division, and the - dividend is large, pre-invert the divisor, and use - only multiplications in the inner loop. */ - - /* This test should be read: - Does it ever help to use udiv_qrnnd_preinv? - && Does what we save compensate for the inversion overhead? */ - if (UDIV_TIME > (2 * UMUL_TIME + 6) - && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME) - { - int normalization_steps; - - count_leading_zeros (normalization_steps, divisor_limb); - if (normalization_steps != 0) - { - mp_limb_t divisor_limb_inverted; - - divisor_limb <<= normalization_steps; - invert_limb (divisor_limb_inverted, divisor_limb); - - n1 = dividend_ptr[dividend_size - 1]; - r = n1 >> (BITS_PER_MP_LIMB - normalization_steps); - - /* Possible optimization: - if (r == 0 - && divisor_limb > ((n1 << normalization_steps) - | (dividend_ptr[dividend_size - 2] >> ...))) - ...one division less... */ - - for (i = dividend_size - 2; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd_preinv (dummy, r, r, - ((n1 << normalization_steps) - | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))), - divisor_limb, divisor_limb_inverted); - n1 = n0; - } - udiv_qrnnd_preinv (dummy, r, r, - n1 << normalization_steps, - divisor_limb, divisor_limb_inverted); - return r >> normalization_steps; - } - else - { - mp_limb_t divisor_limb_inverted; - - invert_limb (divisor_limb_inverted, divisor_limb); - - i = dividend_size - 1; - r = dividend_ptr[i]; - - if (r >= divisor_limb) - r = 0; - else - i--; - - for (; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd_preinv (dummy, r, r, - n0, divisor_limb, divisor_limb_inverted); - } - return r; - } - } - else - { - if (UDIV_NEEDS_NORMALIZATION) - { - int normalization_steps; - - count_leading_zeros (normalization_steps, divisor_limb); - if (normalization_steps != 0) - { - divisor_limb <<= normalization_steps; - - n1 = dividend_ptr[dividend_size - 1]; - r = n1 >> (BITS_PER_MP_LIMB - normalization_steps); - - /* Possible optimization: - if (r == 0 - && divisor_limb > ((n1 << normalization_steps) - | (dividend_ptr[dividend_size - 2] >> ...))) - ...one division less... */ - - for (i = dividend_size - 2; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd (dummy, r, r, - ((n1 << normalization_steps) - | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))), - divisor_limb); - n1 = n0; - } - udiv_qrnnd (dummy, r, r, - n1 << normalization_steps, - divisor_limb); - return r >> normalization_steps; - } - } - /* No normalization needed, either because udiv_qrnnd doesn't require - it, or because DIVISOR_LIMB is already normalized. */ - - i = dividend_size - 1; - r = dividend_ptr[i]; - - if (r >= divisor_limb) - r = 0; - else - i--; - - for (; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd (dummy, r, r, n0, divisor_limb); - } - return r; - } -} diff --git a/rts/gmp/mpn/generic/mod_1_rs.c b/rts/gmp/mpn/generic/mod_1_rs.c deleted file mode 100644 index 62aaa94..0000000 --- a/rts/gmp/mpn/generic/mod_1_rs.c +++ /dev/null @@ -1,111 +0,0 @@ -/* mpn_mod_1_rshift -- mpn remainder under hypothetical right shift. - - THE FUNCTION IN THIS FILE IS FOR INTERNAL USE AND HAS A MUTABLE - INTERFACE. IT IS ONLY SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES. - IT'S ALMOST GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP - RELEASE. */ - -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* When testing on a CPU with UDIV_NEEDS_NORMALIZATION equal to 0, it can be - changed to 1 temporarily to test the code under that case too. */ -#if 0 -#undef UDIV_NEEDS_NORMALIZATION -#define UDIV_NEEDS_NORMALIZATION 1 -#endif - - -/* Calculate the remainder "(ptr,size >> shift) % divisor". Note ptr,size - is unchanged, the shift is only for its effect on the remainder. - The shift doesn't even need to be considered until the last limb. - - This function has the normal size!=0 restriction, unlike the basic - mpn_mod_1. */ - -mp_limb_t -#if __STDC__ -mpn_mod_1_rshift (mp_srcptr ptr, mp_size_t size, unsigned shift, - mp_limb_t divisor) -#else -mpn_mod_1_rshift (ptr, size, shift, divisor) - mp_srcptr ptr; - mp_size_t size; - unsigned shift; - mp_limb_t divisor; -#endif -{ - mp_limb_t quot, rem; - - ASSERT (shift >= 1); - ASSERT (shift < BITS_PER_MP_LIMB); - ASSERT (size >= 1); - - if (size == 1) - return (ptr[0] >> shift) % divisor; - -#if UDIV_NEEDS_NORMALIZATION - { - int norm; - int delta; - - count_leading_zeros (norm, divisor); - divisor <<= norm; - - delta = shift - norm; - if (delta == 0) - return mpn_mod_1 (ptr, size, divisor) >> norm; - - if (delta > 0) - { - rem = mpn_mod_1 (ptr+1, size-1, divisor); - udiv_qrnnd (quot, rem, - rem >> delta, - (rem << (BITS_PER_MP_LIMB-delta)) | (ptr[0] >> delta), - divisor); - return rem >> norm; - } - else - { - rem = mpn_mod_1 (ptr, size, divisor); - udiv_qrnnd (quot, rem, - rem >> (BITS_PER_MP_LIMB+delta), - rem << -delta, - divisor); - return rem >> norm; - } - } - -#else /* !UDIV_NEEDS_NORMALIZATION */ - - rem = mpn_mod_1 (ptr+1, size-1, divisor); - udiv_qrnnd (quot, rem, - rem >> shift, - (rem << (BITS_PER_MP_LIMB-shift)) | (ptr[0] >> shift), - divisor); - return rem; - -#endif -} diff --git a/rts/gmp/mpn/generic/mul.c b/rts/gmp/mpn/generic/mul.c deleted file mode 100644 index cecfa19..0000000 --- a/rts/gmp/mpn/generic/mul.c +++ /dev/null @@ -1,190 +0,0 @@ -/* mpn_mul -- Multiply two natural numbers. - - THE HELPER FUNCTIONS IN THIS FILE (meaning everything except mpn_mul) - 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 GNU MP RELEASE. - - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* 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. */ - -void -#if __STDC__ -mpn_sqr_n (mp_ptr prodp, - mp_srcptr up, mp_size_t un) -#else -mpn_sqr_n (prodp, up, un) - mp_ptr prodp; - mp_srcptr up; - mp_size_t un; -#endif -{ - if (un < KARATSUBA_SQR_THRESHOLD) - { /* plain schoolbook multiplication */ - if (un == 0) - return; - mpn_sqr_basecase (prodp, up, un); - } - else if (un < TOOM3_SQR_THRESHOLD) - { /* karatsuba multiplication */ - mp_ptr tspace; - TMP_DECL (marker); - TMP_MARK (marker); - tspace = (mp_ptr) TMP_ALLOC (2 * (un + BITS_PER_MP_LIMB) * BYTES_PER_MP_LIMB); - mpn_kara_sqr_n (prodp, up, un, tspace); - TMP_FREE (marker); - } -#if WANT_FFT || TUNE_PROGRAM_BUILD - else if (un < FFT_SQR_THRESHOLD) -#else - else -#endif - { /* toom3 multiplication */ - mp_ptr tspace; - TMP_DECL (marker); - TMP_MARK (marker); - tspace = (mp_ptr) TMP_ALLOC (2 * (un + BITS_PER_MP_LIMB) * BYTES_PER_MP_LIMB); - mpn_toom3_sqr_n (prodp, up, un, tspace); - TMP_FREE (marker); - } -#if WANT_FFT || TUNE_PROGRAM_BUILD - else - { - /* schoenhage multiplication */ - mpn_mul_fft_full (prodp, up, un, up, un); - } -#endif -} - -mp_limb_t -#if __STDC__ -mpn_mul (mp_ptr prodp, - mp_srcptr up, mp_size_t un, - mp_srcptr vp, mp_size_t vn) -#else -mpn_mul (prodp, up, un, vp, vn) - mp_ptr prodp; - mp_srcptr up; - mp_size_t un; - mp_srcptr vp; - mp_size_t vn; -#endif -{ - mp_size_t l; - mp_limb_t c; - - if (up == vp && un == vn) - { - mpn_sqr_n (prodp, up, un); - return prodp[2 * un - 1]; - } - - if (vn < KARATSUBA_MUL_THRESHOLD) - { /* long multiplication */ - mpn_mul_basecase (prodp, up, un, vp, vn); - return prodp[un + vn - 1]; - } - - mpn_mul_n (prodp, up, vp, vn); - if (un != vn) - { mp_limb_t t; - mp_ptr ws; - TMP_DECL (marker); - TMP_MARK (marker); - - prodp += vn; - l = vn; - up += vn; - un -= vn; - - if (un < vn) - { - /* Swap u's and v's. */ - MPN_SRCPTR_SWAP (up,un, vp,vn); - } - - ws = (mp_ptr) TMP_ALLOC (((vn >= KARATSUBA_MUL_THRESHOLD ? vn : un) + vn) - * BYTES_PER_MP_LIMB); - - t = 0; - while (vn >= KARATSUBA_MUL_THRESHOLD) - { - mpn_mul_n (ws, up, vp, vn); - if (l <= 2*vn) - { - t += mpn_add_n (prodp, prodp, ws, l); - if (l != 2*vn) - { - t = mpn_add_1 (prodp + l, ws + l, 2*vn - l, t); - l = 2*vn; - } - } - else - { - c = mpn_add_n (prodp, prodp, ws, 2*vn); - t += mpn_add_1 (prodp + 2*vn, prodp + 2*vn, l - 2*vn, c); - } - prodp += vn; - l -= vn; - up += vn; - un -= vn; - if (un < vn) - { - /* Swap u's and v's. */ - MPN_SRCPTR_SWAP (up,un, vp,vn); - } - } - - if (vn) - { - mpn_mul_basecase (ws, up, un, vp, vn); - if (l <= un + vn) - { - t += mpn_add_n (prodp, prodp, ws, l); - if (l != un + vn) - t = mpn_add_1 (prodp + l, ws + l, un + vn - l, t); - } - else - { - c = mpn_add_n (prodp, prodp, ws, un + vn); - t += mpn_add_1 (prodp + un + vn, prodp + un + vn, l - un - vn, c); - } - } - - TMP_FREE (marker); - } - return prodp[un + vn - 1]; -} diff --git a/rts/gmp/mpn/generic/mul_1.c b/rts/gmp/mpn/generic/mul_1.c deleted file mode 100644 index 1c36b5f..0000000 --- a/rts/gmp/mpn/generic/mul_1.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpn_mul_1 -- Multiply a limb vector with a single limb and - store the product in a second limb vector. - -Copyright (C) 1991, 1992, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_mul_1 (res_ptr, s1_ptr, s1_size, s2_limb) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - mp_size_t s1_size; - register mp_limb_t s2_limb; -{ - register mp_limb_t cy_limb; - register mp_size_t j; - register mp_limb_t prod_high, prod_low; - - /* The loop counter and index J goes from -S1_SIZE to -1. This way - the loop becomes faster. */ - j = -s1_size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - res_ptr -= j; - - cy_limb = 0; - do - { - umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb); - - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb) + prod_high; - - res_ptr[j] = prod_low; - } - while (++j != 0); - - return cy_limb; -} diff --git a/rts/gmp/mpn/generic/mul_basecase.c b/rts/gmp/mpn/generic/mul_basecase.c deleted file mode 100644 index 00c06aa..0000000 --- a/rts/gmp/mpn/generic/mul_basecase.c +++ /dev/null @@ -1,87 +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 (C) 1991, 1992, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Handle simple cases with traditional multiplication. - - This is the most critical code of 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 -#if __STDC__ -mpn_mul_basecase (mp_ptr prodp, - mp_srcptr up, mp_size_t usize, - mp_srcptr vp, mp_size_t vsize) -#else -mpn_mul_basecase (prodp, up, usize, vp, vsize) - mp_ptr prodp; - mp_srcptr up; - mp_size_t usize; - mp_srcptr vp; - mp_size_t vsize; -#endif -{ - /* We first multiply by the low order one or two limbs, as the result can - be stored, not added, to PROD. We also avoid a loop for zeroing this - way. */ -#if HAVE_NATIVE_mpn_mul_2 - if (vsize >= 2) - { - prodp[usize + 1] = mpn_mul_2 (prodp, up, usize, vp[0], vp[1]); - prodp += 2, vp += 2, vsize -= 2; - } - else - { - prodp[usize] = mpn_mul_1 (prodp, up, usize, vp[0]); - return; - } -#else - prodp[usize] = mpn_mul_1 (prodp, up, usize, vp[0]); - prodp += 1, vp += 1, vsize -= 1; -#endif - -#if HAVE_NATIVE_mpn_addmul_2 - while (vsize >= 2) - { - prodp[usize + 1] = mpn_addmul_2 (prodp, up, usize, vp[0], vp[1]); - prodp += 2, vp += 2, vsize -= 2; - } - if (vsize != 0) - prodp[usize] = mpn_addmul_1 (prodp, up, usize, vp[0]); -#else - /* For each iteration in the loop, multiply U with one limb from V, and - add the result to PROD. */ - while (vsize != 0) - { - prodp[usize] = mpn_addmul_1 (prodp, up, usize, vp[0]); - prodp += 1, vp += 1, vsize -= 1; - } -#endif -} diff --git a/rts/gmp/mpn/generic/mul_fft.c b/rts/gmp/mpn/generic/mul_fft.c deleted file mode 100644 index 00fd6d7..0000000 --- a/rts/gmp/mpn/generic/mul_fft.c +++ /dev/null @@ -1,772 +0,0 @@ -/* An implementation in GMP of Scho"nhage's fast multiplication algorithm - modulo 2^N+1, by Paul Zimmermann, INRIA Lorraine, February 1998. - - THE CONTENTS OF THIS FILE ARE FOR INTERNAL USE AND THE FUNCTIONS HAVE - MUTABLE INTERFACES. IT IS ONLY SAFE TO REACH THEM THROUGH DOCUMENTED - INTERFACES. IT IS ALMOST GUARANTEED THAT THEY'LL CHANGE OR DISAPPEAR IN - A FUTURE GNU MP RELEASE. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -/* References: - - Schnelle Multiplikation grosser Zahlen, by Arnold Scho"nhage 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 Scho"nhage, - Computer Algebra, EUROCAM'82, LNCS 144, p. 3-15, 1982. - - Tapes versus Pointers, a study in implementing fast algorithms, - by Arnold Scho"nhage, Bulletin of the EATCS, 30, p. 23-32, 1986. - - See also http://www.loria.fr/~zimmerma/bignum - - - Future: - - K==2 isn't needed in the current uses of this code and the bits specific - for that could be dropped. - - It might be possible to avoid a small number of MPN_COPYs by using a - rotating temporary or two. - - Multiplications of unequal sized operands can be done with this code, but - it needs a tighter test for identifying squaring (same sizes as well as - same pointers). */ - - -#include -#include "gmp.h" -#include "gmp-impl.h" - - -/* Change this to "#define TRACE(x) x" for some traces. */ -#define TRACE(x) - - - -FFT_TABLE_ATTRS mp_size_t mpn_fft_table[2][MPN_FFT_TABLE_SIZE] = { - FFT_MUL_TABLE, - FFT_SQR_TABLE -}; - - -static void mpn_mul_fft_internal -_PROTO ((mp_limb_t *op, mp_srcptr n, mp_srcptr m, mp_size_t pl, - int k, int K, - mp_limb_t **Ap, mp_limb_t **Bp, - mp_limb_t *A, mp_limb_t *B, - mp_size_t nprime, mp_size_t l, mp_size_t Mp, int **_fft_l, - mp_limb_t *T, int rec)); - - -/* Find the best k to use for a mod 2^(n*BITS_PER_MP_LIMB)+1 FFT. - sqr==0 if for a multiply, sqr==1 for a square */ -int -#if __STDC__ -mpn_fft_best_k (mp_size_t n, int sqr) -#else -mpn_fft_best_k (n, sqr) - mp_size_t n; - int sqr; -#endif -{ - mp_size_t t; - 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; -} - - -/* Returns smallest possible number of limbs >= pl for a fft of size 2^k. - FIXME: Is this simply pl rounded up to the next multiple of 2^k ? */ - -mp_size_t -#if __STDC__ -mpn_fft_next_size (mp_size_t pl, int k) -#else -mpn_fft_next_size (pl, k) - mp_size_t pl; - int k; -#endif -{ - mp_size_t N, M; - int K; - - /* if (k==0) k = mpn_fft_best_k (pl, sqr); */ - N = pl*BITS_PER_MP_LIMB; - K = 1<=0;i--) ap[i] = ~tp[n-d+i]; - cc = 1-mpn_add_1(ap, ap, d, 1); - if (cc) cc=mpn_sub_1(ap+d, tp, n-d, 1); - else MPN_COPY(ap+d, tp, n-d); - if (cc+=mpn_sub_1(ap+d, ap+d, n-d, tp[n])) - ap[n]=mpn_add_1(ap, ap, n, cc); - else ap[n]=0; - } - else if ((ap[n]=mpn_sub_1(ap, tp, n, tp[n]))) { - ap[n]=mpn_add_1(ap, ap, n, 1); - } - if ((e/(n*BITS_PER_MP_LIMB))%2) mpn_fft_neg_modF(ap, n); -} - - -/* a <- a+b mod 2^(n*BITS_PER_MP_LIMB)+1 */ -static void -#if __STDC__ -mpn_fft_add_modF (mp_limb_t *ap, mp_limb_t *bp, int n) -#else -mpn_fft_add_modF (ap, bp, n) - mp_limb_t *ap,*bp; - int n; -#endif -{ - mp_limb_t c; - - c = ap[n] + bp[n] + mpn_add_n(ap, ap, bp, n); - if (c>1) c -= 1+mpn_sub_1(ap,ap,n,1); - ap[n]=c; -} - - -/* input: A[0] ... A[inc*(K-1)] are residues mod 2^N+1 where - N=n*BITS_PER_MP_LIMB - 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 -#if __STDC__ -mpn_fft_fft_sqr (mp_limb_t **Ap, mp_size_t K, int **ll, - mp_size_t omega, mp_size_t n, mp_size_t inc, mp_limb_t *tp) -#else -mpn_fft_fft_sqr(Ap,K,ll,omega,n,inc,tp) -mp_limb_t **Ap,*tp; -mp_size_t K,omega,n,inc; -int **ll; -#endif -{ - if (K==2) { -#ifdef ADDSUB - if (mpn_addsub_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); - if (mpn_sub_n(Ap[inc], tp, Ap[inc],n+1)) -#endif - Ap[inc][n] = mpn_add_1(Ap[inc], Ap[inc], n, 1); - } - else { - int j, inc2=2*inc; - int *lk = *ll; - mp_limb_t *tmp; - TMP_DECL(marker); - - TMP_MARK(marker); - tmp = TMP_ALLOC_LIMBS (n+1); - mpn_fft_fft_sqr(Ap, K/2,ll-1,2*omega,n,inc2, tp); - mpn_fft_fft_sqr(Ap+inc, K/2,ll-1,2*omega,n,inc2, 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= (sqr ? FFT_MODF_SQR_THRESHOLD : FFT_MODF_MUL_THRESHOLD)) { - int k, K2,nprime2,Nprime2,M2,maxLK,l,Mp2; - int **_fft_l; - mp_limb_t **Ap,**Bp,*A,*B,*T; - - k = mpn_fft_best_k (n, sqr); - K2 = 1<BITS_PER_MP_LIMB) ? K2 : BITS_PER_MP_LIMB; - M2 = n*BITS_PER_MP_LIMB/K2; - l = n/K2; - Nprime2 = ((2*M2+k+2+maxLK)/maxLK)*maxLK; /* ceil((2*M2+k+3)/maxLK)*maxLK*/ - nprime2 = Nprime2/BITS_PER_MP_LIMB; - Mp2 = Nprime2/K2; - - Ap = TMP_ALLOC_MP_PTRS (K2); - Bp = TMP_ALLOC_MP_PTRS (K2); - A = TMP_ALLOC_LIMBS (2*K2*(nprime2+1)); - T = TMP_ALLOC_LIMBS (nprime2+1); - B = A + K2*(nprime2+1); - _fft_l = TMP_ALLOC_TYPE (k+1, int*); - for (i=0;i<=k;i++) - _fft_l[i] = TMP_ALLOC_TYPE (1< %d times %dx%d (%1.2f)\n", n, - n, K2, nprime2, nprime2, 2.0*(double)n/nprime2/K2)); - - for (i=0;i2*n) { - l = n; - rp[n] = mpn_add_1(rp+an-2*n, ap+an-2*n, 3*n-an, - mpn_add_n(rp,ap,ap+2*n,an-2*n)); - } - else { - l = an-n; - MPN_COPY(rp, ap, n); - rp[n]=0; - } - if (mpn_sub_n(rp,rp,ap+n,l)) { - if (mpn_sub_1(rp+l,rp+l,n+1-l,1)) - rp[n]=mpn_add_1(rp,rp,n,1); - } -} - - -static void -#if __STDC__ -mpn_mul_fft_internal(mp_limb_t *op, mp_srcptr n, mp_srcptr m, mp_size_t pl, - int k, int K, - mp_limb_t **Ap, mp_limb_t **Bp, - mp_limb_t *A, mp_limb_t *B, - mp_size_t nprime, mp_size_t l, mp_size_t Mp, - int **_fft_l, - mp_limb_t *T, int rec) -#else -mpn_mul_fft_internal(op,n,m,pl,k,K,Ap,Bp,A,B,nprime,l,Mp,_fft_l,T,rec) - mp_limb_t *op; - mp_srcptr n, m; - mp_limb_t **Ap,**Bp,*A,*B,*T; - mp_size_t pl,nprime; - int **_fft_l; - int k,K,l,Mp,rec; -#endif -{ - int i, sqr, pla, lo, sh, j; - mp_limb_t *p; - - sqr = (n==m); - - TRACE (printf ("pl=%d k=%d K=%d np=%d l=%d Mp=%d rec=%d sqr=%d\n", - pl,k,K,nprime,l,Mp,rec,sqr)); - - /* decomposition of inputs into arrays Ap[i] and Bp[i] */ - if (rec) for (i=0;i= pla, i.e. enough */ - MPN_ZERO(p, pla); - sqr=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; - if (mpn_add_n(n,n,Ap[j],nprime+1)) - sqr += mpn_add_1(n+nprime+1,n+nprime+1,pla-sh-nprime-1,1); - T[2*l]=i+1; /* T = (i+1)*2^(2*M) */ - if (mpn_cmp(Ap[j],T,nprime+1)>0) { /* subtract 2^N'+1 */ - sqr -= mpn_sub_1(n,n,pla-sh,1); - sqr -= mpn_sub_1(p+lo,p+lo,pla-lo,1); - } - } - if (sqr==-1) { - if ((sqr=mpn_add_1(p+pla-pl,p+pla-pl,pl,1))) { - /* p[pla-pl]...p[pla-1] are all zero */ - mpn_sub_1(p+pla-pl-1,p+pla-pl-1,pl+1,1); - mpn_sub_1(p+pla-1,p+pla-1,1,1); - } - } - else if (sqr==1) { - if (pla>=2*pl) - while ((sqr=mpn_add_1(p+pla-2*pl,p+pla-2*pl,2*pl,sqr))); - else { - sqr = mpn_sub_1(p+pla-pl,p+pla-pl,pl,sqr); - ASSERT (sqr == 0); - } - } - else - ASSERT (sqr == 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) */ - mpn_fft_norm_modF(op,p,pl,pla); -} - - -/* op <- n*m mod 2^N+1 with fft of size 2^k where N=pl*BITS_PER_MP_LIMB - n and m have respectively nl and ml limbs - op must have space for pl+1 limbs - One must have pl = mpn_fft_next_size(pl, k). -*/ - -void -#if __STDC__ -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) -#else -mpn_mul_fft (op, pl, n, nl, m, ml, k) - mp_ptr op; - mp_size_t pl; - mp_srcptr n; - mp_size_t nl; - mp_srcptr m; - mp_size_t ml; - int k; -#endif -{ - int K,maxLK,i,j; - mp_size_t N,Nprime,nprime,M,Mp,l; - mp_limb_t **Ap,**Bp,*A,*T,*B; - int **_fft_l; - int sqr = (n==m && nl==ml); - TMP_DECL(marker); - - 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(marker); - N = pl*BITS_PER_MP_LIMB; - _fft_l = TMP_ALLOC_TYPE (k+1, int*); - for (i=0;i<=k;i++) - _fft_l[i] = TMP_ALLOC_TYPE (1<BITS_PER_MP_LIMB) ? K : BITS_PER_MP_LIMB; - - Nprime = ((2*M+k+2+maxLK)/maxLK)*maxLK; /* ceil((2*M+k+3)/maxLK)*maxLK; */ - nprime = Nprime/BITS_PER_MP_LIMB; - TRACE (printf ("N=%d K=%d, M=%d, l=%d, maxLK=%d, Np=%d, np=%d\n", - N, K, M, l, maxLK, Nprime, nprime)); - if (nprime >= (sqr ? FFT_MODF_SQR_THRESHOLD : FFT_MODF_MUL_THRESHOLD)) { - maxLK = (1< %d times %dx%d 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 = _MP_ALLOCATE_FUNC_LIMBS (2*K*(nprime+1)); - B = A+K*(nprime+1); - Ap = TMP_ALLOC_MP_PTRS (K); - Bp = TMP_ALLOC_MP_PTRS (K); - /* special decomposition for main call */ - for (i=0;i0) { - j = (nl>=l) ? l : nl; /* limbs to store in Ap[i] */ - MPN_COPY(Ap[i], n, j); n+=l; MPN_ZERO(Ap[i]+j, nprime+1-j); - mpn_fft_mul_2exp_modF(Ap[i], i*Mp, nprime, T); - } - else MPN_ZERO(Ap[i], nprime+1); - nl -= l; - if (n!=m) { - if (ml>0) { - j = (ml>=l) ? l : ml; /* limbs to store in Bp[i] */ - MPN_COPY(Bp[i], m, j); m+=l; MPN_ZERO(Bp[i]+j, nprime+1-j); - mpn_fft_mul_2exp_modF(Bp[i], i*Mp, nprime, T); - } - else MPN_ZERO(Bp[i], nprime+1); - } - ml -= l; - } - mpn_mul_fft_internal(op,n,m,pl,k,K,Ap,Bp,A,B,nprime,l,Mp,_fft_l,T,0); - TMP_FREE(marker); - _MP_FREE_FUNC_LIMBS (A, 2*K*(nprime+1)); -} - - -#if WANT_ASSERT -static int -#if __STDC__ -mpn_zero_p (mp_ptr p, mp_size_t n) -#else - mpn_zero_p (p, n) - mp_ptr p; - mp_size_t n; -#endif -{ - mp_size_t i; - - for (i = 0; i < n; i++) - { - if (p[i] != 0) - return 0; - } - - return 1; -} -#endif - - -/* Multiply {n,nl}*{m,ml} and write the result to {op,nl+ml}. - - FIXME: Duplicating the result like this is wasteful, do something better - perhaps at the norm_modF stage above. */ - -void -#if __STDC__ -mpn_mul_fft_full (mp_ptr op, - mp_srcptr n, mp_size_t nl, - mp_srcptr m, mp_size_t ml) -#else -mpn_mul_fft_full (op, n, nl, m, ml) - mp_ptr op; - mp_srcptr n; - mp_size_t nl; - mp_srcptr m; - mp_size_t ml; -#endif -{ - mp_ptr pad_op; - mp_size_t pl; - int k; - int sqr = (n==m && nl==ml); - - k = mpn_fft_best_k (nl+ml, sqr); - pl = mpn_fft_next_size (nl+ml, k); - - TRACE (printf ("mpn_mul_fft_full nl=%ld ml=%ld -> pl=%ld k=%d\n", - nl, ml, pl, k)); - - pad_op = _MP_ALLOCATE_FUNC_LIMBS (pl+1); - mpn_mul_fft (pad_op, pl, n, nl, m, ml, k); - - ASSERT (mpn_zero_p (pad_op+nl+ml, pl+1-(nl+ml))); - MPN_COPY (op, pad_op, nl+ml); - - _MP_FREE_FUNC_LIMBS (pad_op, pl+1); -} diff --git a/rts/gmp/mpn/generic/mul_n.c b/rts/gmp/mpn/generic/mul_n.c deleted file mode 100644 index b7563be..0000000 --- a/rts/gmp/mpn/generic/mul_n.c +++ /dev/null @@ -1,1343 +0,0 @@ -/* mpn_mul_n and helper function -- Multiply/square natural numbers. - - THE HELPER FUNCTIONS IN THIS FILE (meaning everything except mpn_mul_n) - 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 GNU MP RELEASE. - - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Multiplicative inverse of 3, modulo 2^BITS_PER_MP_LIMB. - 0xAAAAAAAB for 32 bits, 0xAAAAAAAAAAAAAAAB for 64 bits. */ -#define INVERSE_3 ((MP_LIMB_T_MAX / 3) * 2 + 1) - -#if !defined (__alpha) && !defined (__mips) -/* For all other machines, we want to call mpn functions for the compund - operations instead of open-coding them. */ -#define USE_MORE_MPN -#endif - -/*== Function declarations =================================================*/ - -static void evaluate3 _PROTO ((mp_ptr, mp_ptr, mp_ptr, - mp_ptr, mp_ptr, mp_ptr, - mp_srcptr, mp_srcptr, mp_srcptr, - mp_size_t, mp_size_t)); -static void interpolate3 _PROTO ((mp_srcptr, - mp_ptr, mp_ptr, mp_ptr, - mp_srcptr, - mp_ptr, mp_ptr, mp_ptr, - mp_size_t, mp_size_t)); -static mp_limb_t add2Times _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); - - -/*-- mpn_kara_mul_n ---------------------------------------------------------------*/ - -/* Multiplies using 3 half-sized mults and so on recursively. - * p[0..2*n-1] := product of a[0..n-1] and b[0..n-1]. - * No overlap of p[...] with a[...] or b[...]. - * ws is workspace. - */ - -void -#if __STDC__ -mpn_kara_mul_n (mp_ptr p, mp_srcptr a, mp_srcptr b, mp_size_t n, mp_ptr ws) -#else -mpn_kara_mul_n(p, a, b, n, ws) - mp_ptr p; - mp_srcptr a; - mp_srcptr b; - mp_size_t n; - mp_ptr ws; -#endif -{ - mp_limb_t i, sign, w, w0, w1; - mp_size_t n2; - mp_srcptr x, y; - - n2 = n >> 1; - ASSERT (n2 > 0); - - if (n & 1) - { - /* Odd length. */ - mp_size_t n1, n3, nm1; - - n3 = n - n2; - - sign = 0; - w = a[n2]; - if (w != 0) - w -= mpn_sub_n (p, a, a + n3, n2); - else - { - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n3+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = a + n3; - y = a; - sign = 1; - } - else - { - x = a; - y = a + n3; - } - mpn_sub_n (p, x, y, n2); - } - p[n2] = w; - - w = b[n2]; - if (w != 0) - w -= mpn_sub_n (p + n3, b, b + n3, n2); - else - { - i = n2; - do - { - --i; - w0 = b[i]; - w1 = b[n3+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = b + n3; - y = b; - sign ^= 1; - } - else - { - x = b; - y = b + n3; - } - mpn_sub_n (p + n3, x, y, n2); - } - p[n] = w; - - n1 = n + 1; - if (n2 < KARATSUBA_MUL_THRESHOLD) - { - if (n3 < KARATSUBA_MUL_THRESHOLD) - { - mpn_mul_basecase (ws, p, n3, p + n3, n3); - mpn_mul_basecase (p, a, n3, b, n3); - } - else - { - mpn_kara_mul_n (ws, p, p + n3, n3, ws + n1); - mpn_kara_mul_n (p, a, b, n3, ws + n1); - } - mpn_mul_basecase (p + n1, a + n3, n2, b + n3, n2); - } - else - { - mpn_kara_mul_n (ws, p, p + n3, n3, ws + n1); - mpn_kara_mul_n (p, a, b, n3, ws + n1); - mpn_kara_mul_n (p + n1, a + n3, b + n3, n2, ws + n1); - } - - if (sign) - mpn_add_n (ws, p, ws, n1); - else - mpn_sub_n (ws, p, ws, n1); - - nm1 = n - 1; - if (mpn_add_n (ws, p + n1, ws, nm1)) - { - mp_limb_t x = ws[nm1] + 1; - ws[nm1] = x; - if (x == 0) - ++ws[n]; - } - if (mpn_add_n (p + n3, p + n3, ws, n1)) - { - mp_limb_t x; - i = n1 + n3; - do - { - x = p[i] + 1; - p[i] = x; - ++i; - } while (x == 0); - } - } - else - { - /* Even length. */ - mp_limb_t t; - - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n2+i]; - } - while (w0 == w1 && i != 0); - sign = 0; - if (w0 < w1) - { - x = a + n2; - y = a; - sign = 1; - } - else - { - x = a; - y = a + n2; - } - mpn_sub_n (p, x, y, n2); - - i = n2; - do - { - --i; - w0 = b[i]; - w1 = b[n2+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = b + n2; - y = b; - sign ^= 1; - } - else - { - x = b; - y = b + n2; - } - mpn_sub_n (p + n2, x, y, n2); - - /* Pointwise products. */ - if (n2 < KARATSUBA_MUL_THRESHOLD) - { - mpn_mul_basecase (ws, p, n2, p + n2, n2); - mpn_mul_basecase (p, a, n2, b, n2); - mpn_mul_basecase (p + n, a + n2, n2, b + n2, n2); - } - else - { - mpn_kara_mul_n (ws, p, p + n2, n2, ws + n); - mpn_kara_mul_n (p, a, b, n2, ws + n); - mpn_kara_mul_n (p + n, a + n2, b + n2, n2, ws + n); - } - - /* Interpolate. */ - if (sign) - w = mpn_add_n (ws, p, ws, n); - else - w = -mpn_sub_n (ws, p, ws, n); - w += mpn_add_n (ws, p + n, ws, n); - w += mpn_add_n (p + n2, p + n2, ws, n); - /* TO DO: could put "if (w) { ... }" here. - * Less work but badly predicted branch. - * No measurable difference in speed on Alpha. - */ - i = n + n2; - t = p[i] + w; - p[i] = t; - if (t < w) - { - do - { - ++i; - w = p[i] + 1; - p[i] = w; - } - while (w == 0); - } - } -} - -void -#if __STDC__ -mpn_kara_sqr_n (mp_ptr p, mp_srcptr a, mp_size_t n, mp_ptr ws) -#else -mpn_kara_sqr_n (p, a, n, ws) - mp_ptr p; - mp_srcptr a; - mp_size_t n; - mp_ptr ws; -#endif -{ - mp_limb_t i, sign, w, w0, w1; - mp_size_t n2; - mp_srcptr x, y; - - n2 = n >> 1; - ASSERT (n2 > 0); - - if (n & 1) - { - /* Odd length. */ - mp_size_t n1, n3, nm1; - - n3 = n - n2; - - sign = 0; - w = a[n2]; - if (w != 0) - w -= mpn_sub_n (p, a, a + n3, n2); - else - { - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n3+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = a + n3; - y = a; - sign = 1; - } - else - { - x = a; - y = a + n3; - } - mpn_sub_n (p, x, y, n2); - } - p[n2] = w; - - w = a[n2]; - if (w != 0) - w -= mpn_sub_n (p + n3, a, a + n3, n2); - else - { - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n3+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = a + n3; - y = a; - sign ^= 1; - } - else - { - x = a; - y = a + n3; - } - mpn_sub_n (p + n3, x, y, n2); - } - p[n] = w; - - n1 = n + 1; - if (n2 < KARATSUBA_SQR_THRESHOLD) - { - if (n3 < KARATSUBA_SQR_THRESHOLD) - { - mpn_sqr_basecase (ws, p, n3); - mpn_sqr_basecase (p, a, n3); - } - else - { - mpn_kara_sqr_n (ws, p, n3, ws + n1); - mpn_kara_sqr_n (p, a, n3, ws + n1); - } - mpn_sqr_basecase (p + n1, a + n3, n2); - } - else - { - mpn_kara_sqr_n (ws, p, n3, ws + n1); - mpn_kara_sqr_n (p, a, n3, ws + n1); - mpn_kara_sqr_n (p + n1, a + n3, n2, ws + n1); - } - - if (sign) - mpn_add_n (ws, p, ws, n1); - else - mpn_sub_n (ws, p, ws, n1); - - nm1 = n - 1; - if (mpn_add_n (ws, p + n1, ws, nm1)) - { - mp_limb_t x = ws[nm1] + 1; - ws[nm1] = x; - if (x == 0) - ++ws[n]; - } - if (mpn_add_n (p + n3, p + n3, ws, n1)) - { - mp_limb_t x; - i = n1 + n3; - do - { - x = p[i] + 1; - p[i] = x; - ++i; - } while (x == 0); - } - } - else - { - /* Even length. */ - mp_limb_t t; - - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n2+i]; - } - while (w0 == w1 && i != 0); - sign = 0; - if (w0 < w1) - { - x = a + n2; - y = a; - sign = 1; - } - else - { - x = a; - y = a + n2; - } - mpn_sub_n (p, x, y, n2); - - i = n2; - do - { - --i; - w0 = a[i]; - w1 = a[n2+i]; - } - while (w0 == w1 && i != 0); - if (w0 < w1) - { - x = a + n2; - y = a; - sign ^= 1; - } - else - { - x = a; - y = a + n2; - } - mpn_sub_n (p + n2, x, y, n2); - - /* Pointwise products. */ - if (n2 < KARATSUBA_SQR_THRESHOLD) - { - mpn_sqr_basecase (ws, p, n2); - mpn_sqr_basecase (p, a, n2); - mpn_sqr_basecase (p + n, a + n2, n2); - } - else - { - mpn_kara_sqr_n (ws, p, n2, ws + n); - mpn_kara_sqr_n (p, a, n2, ws + n); - mpn_kara_sqr_n (p + n, a + n2, n2, ws + n); - } - - /* Interpolate. */ - if (sign) - w = mpn_add_n (ws, p, ws, n); - else - w = -mpn_sub_n (ws, p, ws, n); - w += mpn_add_n (ws, p + n, ws, n); - w += mpn_add_n (p + n2, p + n2, ws, n); - /* TO DO: could put "if (w) { ... }" here. - * Less work but badly predicted branch. - * No measurable difference in speed on Alpha. - */ - i = n + n2; - t = p[i] + w; - p[i] = t; - if (t < w) - { - do - { - ++i; - w = p[i] + 1; - p[i] = w; - } - while (w == 0); - } - } -} - -/*-- add2Times -------------------------------------------------------------*/ - -/* z[] = x[] + 2 * y[] - Note that z and x might point to the same vectors. */ -#ifdef USE_MORE_MPN -static inline mp_limb_t -#if __STDC__ -add2Times (mp_ptr z, mp_srcptr x, mp_srcptr y, mp_size_t n) -#else -add2Times (z, x, y, n) - mp_ptr z; - mp_srcptr x; - mp_srcptr y; - mp_size_t n; -#endif -{ - mp_ptr t; - mp_limb_t c; - TMP_DECL (marker); - TMP_MARK (marker); - t = (mp_ptr) TMP_ALLOC (n * BYTES_PER_MP_LIMB); - c = mpn_lshift (t, y, n, 1); - c += mpn_add_n (z, x, t, n); - TMP_FREE (marker); - return c; -} -#else - -static mp_limb_t -#if __STDC__ -add2Times (mp_ptr z, mp_srcptr x, mp_srcptr y, mp_size_t n) -#else -add2Times (z, x, y, n) - mp_ptr z; - mp_srcptr x; - mp_srcptr y; - mp_size_t n; -#endif -{ - mp_limb_t c, v, w; - - ASSERT (n > 0); - v = *x; w = *y; - c = w >> (BITS_PER_MP_LIMB - 1); - w <<= 1; - v += w; - c += v < w; - *z = v; - ++x; ++y; ++z; - while (--n) - { - v = *x; - w = *y; - v += c; - c = v < c; - c += w >> (BITS_PER_MP_LIMB - 1); - w <<= 1; - v += w; - c += v < w; - *z = v; - ++x; ++y; ++z; - } - - return c; -} -#endif - -/*-- evaluate3 -------------------------------------------------------------*/ - -/* Evaluates: - * ph := 4*A+2*B+C - * p1 := A+B+C - * p2 := A+2*B+4*C - * where: - * ph[], p1[], p2[], A[] and B[] all have length len, - * C[] has length len2 with len-len2 = 0, 1 or 2. - * Returns top words (overflow) at pth, pt1 and pt2 respectively. - */ -#ifdef USE_MORE_MPN -static void -#if __STDC__ -evaluate3 (mp_ptr ph, mp_ptr p1, mp_ptr p2, mp_ptr pth, mp_ptr pt1, mp_ptr pt2, - mp_srcptr A, mp_srcptr B, mp_srcptr C, mp_size_t len, mp_size_t len2) -#else -evaluate3 (ph, p1, p2, pth, pt1, pt2, - A, B, C, len, len2) - mp_ptr ph; - mp_ptr p1; - mp_ptr p2; - mp_ptr pth; - mp_ptr pt1; - mp_ptr pt2; - mp_srcptr A; - mp_srcptr B; - mp_srcptr C; - mp_size_t len; - mp_size_t len2; -#endif -{ - mp_limb_t c, d, e; - - ASSERT (len - len2 <= 2); - - e = mpn_lshift (p1, B, len, 1); - - c = mpn_lshift (ph, A, len, 2); - c += e + mpn_add_n (ph, ph, p1, len); - d = mpn_add_n (ph, ph, C, len2); - if (len2 == len) c += d; else c += mpn_add_1 (ph + len2, ph + len2, len-len2, d); - ASSERT (c < 7); - *pth = c; - - c = mpn_lshift (p2, C, len2, 2); -#if 1 - if (len2 != len) { p2[len-1] = 0; p2[len2] = c; c = 0; } - c += e + mpn_add_n (p2, p2, p1, len); -#else - d = mpn_add_n (p2, p2, p1, len2); - c += d; - if (len2 != len) c = mpn_add_1 (p2+len2, p1+len2, len-len2, c); - c += e; -#endif - c += mpn_add_n (p2, p2, A, len); - ASSERT (c < 7); - *pt2 = c; - - c = mpn_add_n (p1, A, B, len); - d = mpn_add_n (p1, p1, C, len2); - if (len2 == len) c += d; - else c += mpn_add_1 (p1+len2, p1+len2, len-len2, d); - ASSERT (c < 3); - *pt1 = c; - -} - -#else - -static void -#if __STDC__ -evaluate3 (mp_ptr ph, mp_ptr p1, mp_ptr p2, mp_ptr pth, mp_ptr pt1, mp_ptr pt2, - mp_srcptr A, mp_srcptr B, mp_srcptr C, mp_size_t l, mp_size_t ls) -#else -evaluate3 (ph, p1, p2, pth, pt1, pt2, - A, B, C, l, ls) - mp_ptr ph; - mp_ptr p1; - mp_ptr p2; - mp_ptr pth; - mp_ptr pt1; - mp_ptr pt2; - mp_srcptr A; - mp_srcptr B; - mp_srcptr C; - mp_size_t l; - mp_size_t ls; -#endif -{ - mp_limb_t a,b,c, i, t, th,t1,t2, vh,v1,v2; - - ASSERT (l - ls <= 2); - - th = t1 = t2 = 0; - for (i = 0; i < l; ++i) - { - a = *A; - b = *B; - c = i < ls ? *C : 0; - - /* TO DO: choose one of the following alternatives. */ -#if 0 - t = a << 2; - vh = th + t; - th = vh < t; - th += a >> (BITS_PER_MP_LIMB - 2); - t = b << 1; - vh += t; - th += vh < t; - th += b >> (BITS_PER_MP_LIMB - 1); - vh += c; - th += vh < c; -#else - vh = th + c; - th = vh < c; - t = b << 1; - vh += t; - th += vh < t; - th += b >> (BITS_PER_MP_LIMB - 1); - t = a << 2; - vh += t; - th += vh < t; - th += a >> (BITS_PER_MP_LIMB - 2); -#endif - - v1 = t1 + a; - t1 = v1 < a; - v1 += b; - t1 += v1 < b; - v1 += c; - t1 += v1 < c; - - v2 = t2 + a; - t2 = v2 < a; - t = b << 1; - v2 += t; - t2 += v2 < t; - t2 += b >> (BITS_PER_MP_LIMB - 1); - t = c << 2; - v2 += t; - t2 += v2 < t; - t2 += c >> (BITS_PER_MP_LIMB - 2); - - *ph = vh; - *p1 = v1; - *p2 = v2; - - ++A; ++B; ++C; - ++ph; ++p1; ++p2; - } - - ASSERT (th < 7); - ASSERT (t1 < 3); - ASSERT (t2 < 7); - - *pth = th; - *pt1 = t1; - *pt2 = t2; -} -#endif - - -/*-- interpolate3 ----------------------------------------------------------*/ - -/* Interpolates B, C, D (in-place) from: - * 16*A+8*B+4*C+2*D+E - * A+B+C+D+E - * A+2*B+4*C+8*D+16*E - * where: - * A[], B[], C[] and D[] all have length l, - * E[] has length ls with l-ls = 0, 2 or 4. - * - * Reads top words (from earlier overflow) from ptb, ptc and ptd, - * and returns new top words there. - */ - -#ifdef USE_MORE_MPN -static void -#if __STDC__ -interpolate3 (mp_srcptr A, mp_ptr B, mp_ptr C, mp_ptr D, mp_srcptr E, - mp_ptr ptb, mp_ptr ptc, mp_ptr ptd, mp_size_t len, mp_size_t len2) -#else -interpolate3 (A, B, C, D, E, - ptb, ptc, ptd, len, len2) - mp_srcptr A; - mp_ptr B; - mp_ptr C; - mp_ptr D; - mp_srcptr E; - mp_ptr ptb; - mp_ptr ptc; - mp_ptr ptd; - mp_size_t len; - mp_size_t len2; -#endif -{ - mp_ptr ws; - mp_limb_t t, tb,tc,td; - TMP_DECL (marker); - TMP_MARK (marker); - - ASSERT (len - len2 == 0 || len - len2 == 2 || len - len2 == 4); - - /* Let x1, x2, x3 be the values to interpolate. We have: - * b = 16*a + 8*x1 + 4*x2 + 2*x3 + e - * c = a + x1 + x2 + x3 + e - * d = a + 2*x1 + 4*x2 + 8*x3 + 16*e - */ - - ws = (mp_ptr) TMP_ALLOC (len * BYTES_PER_MP_LIMB); - - tb = *ptb; tc = *ptc; td = *ptd; - - - /* b := b - 16*a - e - * c := c - a - e - * d := d - a - 16*e - */ - - t = mpn_lshift (ws, A, len, 4); - tb -= t + mpn_sub_n (B, B, ws, len); - t = mpn_sub_n (B, B, E, len2); - if (len2 == len) tb -= t; - else tb -= mpn_sub_1 (B+len2, B+len2, len-len2, t); - - tc -= mpn_sub_n (C, C, A, len); - t = mpn_sub_n (C, C, E, len2); - if (len2 == len) tc -= t; - else tc -= mpn_sub_1 (C+len2, C+len2, len-len2, t); - - t = mpn_lshift (ws, E, len2, 4); - t += mpn_add_n (ws, ws, A, len2); -#if 1 - if (len2 != len) t = mpn_add_1 (ws+len2, A+len2, len-len2, t); - td -= t + mpn_sub_n (D, D, ws, len); -#else - t += mpn_sub_n (D, D, ws, len2); - if (len2 != len) { - t = mpn_sub_1 (D+len2, D+len2, len-len2, t); - t += mpn_sub_n (D+len2, D+len2, A+len2, len-len2); - } /* end if/else */ - td -= t; -#endif - - - /* b, d := b + d, b - d */ - -#ifdef HAVE_MPN_ADD_SUB_N - /* #error TO DO ... */ -#else - t = tb + td + mpn_add_n (ws, B, D, len); - td = tb - td - mpn_sub_n (D, B, D, len); - tb = t; - MPN_COPY (B, ws, len); -#endif - - /* b := b-8*c */ - t = 8 * tc + mpn_lshift (ws, C, len, 3); - tb -= t + mpn_sub_n (B, B, ws, len); - - /* c := 2*c - b */ - tc = 2 * tc + mpn_lshift (C, C, len, 1); - tc -= tb + mpn_sub_n (C, C, B, len); - - /* d := d/3 */ - td = (td - mpn_divexact_by3 (D, D, len)) * INVERSE_3; - - /* b, d := b + d, b - d */ -#ifdef HAVE_MPN_ADD_SUB_N - /* #error TO DO ... */ -#else - t = tb + td + mpn_add_n (ws, B, D, len); - td = tb - td - mpn_sub_n (D, B, D, len); - tb = t; - MPN_COPY (B, ws, len); -#endif - - /* Now: - * b = 4*x1 - * c = 2*x2 - * d = 4*x3 - */ - - ASSERT(!(*B & 3)); - mpn_rshift (B, B, len, 2); - B[len-1] |= tb<<(BITS_PER_MP_LIMB-2); - ASSERT((long)tb >= 0); - tb >>= 2; - - ASSERT(!(*C & 1)); - mpn_rshift (C, C, len, 1); - C[len-1] |= tc<<(BITS_PER_MP_LIMB-1); - ASSERT((long)tc >= 0); - tc >>= 1; - - ASSERT(!(*D & 3)); - mpn_rshift (D, D, len, 2); - D[len-1] |= td<<(BITS_PER_MP_LIMB-2); - ASSERT((long)td >= 0); - td >>= 2; - -#if WANT_ASSERT - ASSERT (tb < 2); - if (len == len2) - { - ASSERT (tc < 3); - ASSERT (td < 2); - } - else - { - ASSERT (tc < 2); - ASSERT (!td); - } -#endif - - *ptb = tb; - *ptc = tc; - *ptd = td; - - TMP_FREE (marker); -} - -#else - -static void -#if __STDC__ -interpolate3 (mp_srcptr A, mp_ptr B, mp_ptr C, mp_ptr D, mp_srcptr E, - mp_ptr ptb, mp_ptr ptc, mp_ptr ptd, mp_size_t l, mp_size_t ls) -#else -interpolate3 (A, B, C, D, E, - ptb, ptc, ptd, l, ls) - mp_srcptr A; - mp_ptr B; - mp_ptr C; - mp_ptr D; - mp_srcptr E; - mp_ptr ptb; - mp_ptr ptc; - mp_ptr ptd; - mp_size_t l; - mp_size_t ls; -#endif -{ - mp_limb_t a,b,c,d,e,t, i, sb,sc,sd, ob,oc,od; - const mp_limb_t maskOffHalf = (~(mp_limb_t) 0) << (BITS_PER_MP_LIMB >> 1); - -#if WANT_ASSERT - t = l - ls; - ASSERT (t == 0 || t == 2 || t == 4); -#endif - - sb = sc = sd = 0; - for (i = 0; i < l; ++i) - { - mp_limb_t tb, tc, td, tt; - - a = *A; - b = *B; - c = *C; - d = *D; - e = i < ls ? *E : 0; - - /* Let x1, x2, x3 be the values to interpolate. We have: - * b = 16*a + 8*x1 + 4*x2 + 2*x3 + e - * c = a + x1 + x2 + x3 + e - * d = a + 2*x1 + 4*x2 + 8*x3 + 16*e - */ - - /* b := b - 16*a - e - * c := c - a - e - * d := d - a - 16*e - */ - t = a << 4; - tb = -(a >> (BITS_PER_MP_LIMB - 4)) - (b < t); - b -= t; - tb -= b < e; - b -= e; - tc = -(c < a); - c -= a; - tc -= c < e; - c -= e; - td = -(d < a); - d -= a; - t = e << 4; - td = td - (e >> (BITS_PER_MP_LIMB - 4)) - (d < t); - d -= t; - - /* b, d := b + d, b - d */ - t = b + d; - tt = tb + td + (t < b); - td = tb - td - (b < d); - d = b - d; - b = t; - tb = tt; - - /* b := b-8*c */ - t = c << 3; - tb = tb - (tc << 3) - (c >> (BITS_PER_MP_LIMB - 3)) - (b < t); - b -= t; - - /* c := 2*c - b */ - t = c << 1; - tc = (tc << 1) + (c >> (BITS_PER_MP_LIMB - 1)) - tb - (t < b); - c = t - b; - - /* d := d/3 */ - d *= INVERSE_3; - td = td - (d >> (BITS_PER_MP_LIMB - 1)) - (d*3 < d); - td *= INVERSE_3; - - /* b, d := b + d, b - d */ - t = b + d; - tt = tb + td + (t < b); - td = tb - td - (b < d); - d = b - d; - b = t; - tb = tt; - - /* Now: - * b = 4*x1 - * c = 2*x2 - * d = 4*x3 - */ - - /* sb has period 2. */ - b += sb; - tb += b < sb; - sb &= maskOffHalf; - sb |= sb >> (BITS_PER_MP_LIMB >> 1); - sb += tb; - - /* sc has period 1. */ - c += sc; - tc += c < sc; - /* TO DO: choose one of the following alternatives. */ -#if 1 - sc = (mp_limb_t)((long)sc >> (BITS_PER_MP_LIMB - 1)); - sc += tc; -#else - sc = tc - ((long)sc < 0L); -#endif - - /* sd has period 2. */ - d += sd; - td += d < sd; - sd &= maskOffHalf; - sd |= sd >> (BITS_PER_MP_LIMB >> 1); - sd += td; - - if (i != 0) - { - B[-1] = ob | b << (BITS_PER_MP_LIMB - 2); - C[-1] = oc | c << (BITS_PER_MP_LIMB - 1); - D[-1] = od | d << (BITS_PER_MP_LIMB - 2); - } - ob = b >> 2; - oc = c >> 1; - od = d >> 2; - - ++A; ++B; ++C; ++D; ++E; - } - - /* Handle top words. */ - b = *ptb; - c = *ptc; - d = *ptd; - - t = b + d; - d = b - d; - b = t; - b -= c << 3; - c = (c << 1) - b; - d *= INVERSE_3; - t = b + d; - d = b - d; - b = t; - - b += sb; - c += sc; - d += sd; - - B[-1] = ob | b << (BITS_PER_MP_LIMB - 2); - C[-1] = oc | c << (BITS_PER_MP_LIMB - 1); - D[-1] = od | d << (BITS_PER_MP_LIMB - 2); - - b >>= 2; - c >>= 1; - d >>= 2; - -#if WANT_ASSERT - ASSERT (b < 2); - if (l == ls) - { - ASSERT (c < 3); - ASSERT (d < 2); - } - else - { - ASSERT (c < 2); - ASSERT (!d); - } -#endif - - *ptb = b; - *ptc = c; - *ptd = d; -} -#endif - - -/*-- mpn_toom3_mul_n --------------------------------------------------------------*/ - -/* Multiplies using 5 mults of one third size and so on recursively. - * p[0..2*n-1] := product of a[0..n-1] and b[0..n-1]. - * No overlap of p[...] with a[...] or b[...]. - * ws is workspace. - */ - -/* TO DO: If TOOM3_MUL_THRESHOLD is much bigger than KARATSUBA_MUL_THRESHOLD then the - * recursion in mpn_toom3_mul_n() will always bottom out with mpn_kara_mul_n() - * because the "n < KARATSUBA_MUL_THRESHOLD" test here will always be false. - */ - -#define TOOM3_MUL_REC(p, a, b, n, ws) \ - do { \ - if (n < KARATSUBA_MUL_THRESHOLD) \ - mpn_mul_basecase (p, a, n, b, n); \ - else if (n < TOOM3_MUL_THRESHOLD) \ - mpn_kara_mul_n (p, a, b, n, ws); \ - else \ - mpn_toom3_mul_n (p, a, b, n, ws); \ - } while (0) - -void -#if __STDC__ -mpn_toom3_mul_n (mp_ptr p, mp_srcptr a, mp_srcptr b, mp_size_t n, mp_ptr ws) -#else -mpn_toom3_mul_n (p, a, b, n, ws) - mp_ptr p; - mp_srcptr a; - mp_srcptr b; - mp_size_t n; - mp_ptr ws; -#endif -{ - mp_limb_t cB,cC,cD, dB,dC,dD, tB,tC,tD; - mp_limb_t *A,*B,*C,*D,*E, *W; - mp_size_t l,l2,l3,l4,l5,ls; - - /* Break n words into chunks of size l, l and ls. - * n = 3*k => l = k, ls = k - * n = 3*k+1 => l = k+1, ls = k-1 - * n = 3*k+2 => l = k+1, ls = k - */ - { - mp_limb_t m; - - ASSERT (n >= TOOM3_MUL_THRESHOLD); - l = ls = n / 3; - m = n - l * 3; - if (m != 0) - ++l; - if (m == 1) - --ls; - - l2 = l * 2; - l3 = l * 3; - l4 = l * 4; - l5 = l * 5; - A = p; - B = ws; - C = p + l2; - D = ws + l2; - E = p + l4; - W = ws + l4; - } - - /** First stage: evaluation at points 0, 1/2, 1, 2, oo. **/ - evaluate3 (A, B, C, &cB, &cC, &cD, a, a + l, a + l2, l, ls); - evaluate3 (A + l, B + l, C + l, &dB, &dC, &dD, b, b + l, b + l2, l, ls); - - /** Second stage: pointwise multiplies. **/ - TOOM3_MUL_REC(D, C, C + l, l, W); - tD = cD*dD; - if (cD) tD += mpn_addmul_1 (D + l, C + l, l, cD); - if (dD) tD += mpn_addmul_1 (D + l, C, l, dD); - ASSERT (tD < 49); - TOOM3_MUL_REC(C, B, B + l, l, W); - tC = cC*dC; - /* TO DO: choose one of the following alternatives. */ -#if 0 - if (cC) tC += mpn_addmul_1 (C + l, B + l, l, cC); - if (dC) tC += mpn_addmul_1 (C + l, B, l, dC); -#else - if (cC) - { - if (cC == 1) tC += mpn_add_n (C + l, C + l, B + l, l); - else tC += add2Times (C + l, C + l, B + l, l); - } - if (dC) - { - if (dC == 1) tC += mpn_add_n (C + l, C + l, B, l); - else tC += add2Times (C + l, C + l, B, l); - } -#endif - ASSERT (tC < 9); - TOOM3_MUL_REC(B, A, A + l, l, W); - tB = cB*dB; - if (cB) tB += mpn_addmul_1 (B + l, A + l, l, cB); - if (dB) tB += mpn_addmul_1 (B + l, A, l, dB); - ASSERT (tB < 49); - TOOM3_MUL_REC(A, a, b, l, W); - TOOM3_MUL_REC(E, a + l2, b + l2, ls, W); - - /** Third stage: interpolation. **/ - interpolate3 (A, B, C, D, E, &tB, &tC, &tD, l2, ls << 1); - - /** Final stage: add up the coefficients. **/ - { - mp_limb_t i, x, y; - tB += mpn_add_n (p + l, p + l, B, l2); - tD += mpn_add_n (p + l3, p + l3, D, l2); - mpn_incr_u (p + l3, tB); - mpn_incr_u (p + l4, tC); - mpn_incr_u (p + l5, tD); - } -} - -/*-- mpn_toom3_sqr_n --------------------------------------------------------------*/ - -/* Like previous function but for squaring */ - -#define TOOM3_SQR_REC(p, a, n, ws) \ - do { \ - if (n < KARATSUBA_SQR_THRESHOLD) \ - mpn_sqr_basecase (p, a, n); \ - else if (n < TOOM3_SQR_THRESHOLD) \ - mpn_kara_sqr_n (p, a, n, ws); \ - else \ - mpn_toom3_sqr_n (p, a, n, ws); \ - } while (0) - -void -#if __STDC__ -mpn_toom3_sqr_n (mp_ptr p, mp_srcptr a, mp_size_t n, mp_ptr ws) -#else -mpn_toom3_sqr_n (p, a, n, ws) - mp_ptr p; - mp_srcptr a; - mp_size_t n; - mp_ptr ws; -#endif -{ - mp_limb_t cB,cC,cD, tB,tC,tD; - mp_limb_t *A,*B,*C,*D,*E, *W; - mp_size_t l,l2,l3,l4,l5,ls; - - /* Break n words into chunks of size l, l and ls. - * n = 3*k => l = k, ls = k - * n = 3*k+1 => l = k+1, ls = k-1 - * n = 3*k+2 => l = k+1, ls = k - */ - { - mp_limb_t m; - - ASSERT (n >= TOOM3_MUL_THRESHOLD); - l = ls = n / 3; - m = n - l * 3; - if (m != 0) - ++l; - if (m == 1) - --ls; - - l2 = l * 2; - l3 = l * 3; - l4 = l * 4; - l5 = l * 5; - A = p; - B = ws; - C = p + l2; - D = ws + l2; - E = p + l4; - W = ws + l4; - } - - /** First stage: evaluation at points 0, 1/2, 1, 2, oo. **/ - evaluate3 (A, B, C, &cB, &cC, &cD, a, a + l, a + l2, l, ls); - - /** Second stage: pointwise multiplies. **/ - TOOM3_SQR_REC(D, C, l, W); - tD = cD*cD; - if (cD) tD += mpn_addmul_1 (D + l, C, l, 2*cD); - ASSERT (tD < 49); - TOOM3_SQR_REC(C, B, l, W); - tC = cC*cC; - /* TO DO: choose one of the following alternatives. */ -#if 0 - if (cC) tC += mpn_addmul_1 (C + l, B, l, 2*cC); -#else - if (cC >= 1) - { - tC += add2Times (C + l, C + l, B, l); - if (cC == 2) - tC += add2Times (C + l, C + l, B, l); - } -#endif - ASSERT (tC < 9); - TOOM3_SQR_REC(B, A, l, W); - tB = cB*cB; - if (cB) tB += mpn_addmul_1 (B + l, A, l, 2*cB); - ASSERT (tB < 49); - TOOM3_SQR_REC(A, a, l, W); - TOOM3_SQR_REC(E, a + l2, ls, W); - - /** Third stage: interpolation. **/ - interpolate3 (A, B, C, D, E, &tB, &tC, &tD, l2, ls << 1); - - /** Final stage: add up the coefficients. **/ - { - mp_limb_t i, x, y; - tB += mpn_add_n (p + l, p + l, B, l2); - tD += mpn_add_n (p + l3, p + l3, D, l2); - mpn_incr_u (p + l3, tB); - mpn_incr_u (p + l4, tC); - mpn_incr_u (p + l5, tD); - } -} - -void -#if __STDC__ -mpn_mul_n (mp_ptr p, mp_srcptr a, mp_srcptr b, mp_size_t n) -#else -mpn_mul_n (p, a, b, n) - mp_ptr p; - mp_srcptr a; - mp_srcptr b; - mp_size_t n; -#endif -{ - if (n < KARATSUBA_MUL_THRESHOLD) - mpn_mul_basecase (p, a, n, b, n); - else if (n < TOOM3_MUL_THRESHOLD) - { - /* Allocate workspace of fixed size on stack: fast! */ -#if TUNE_PROGRAM_BUILD - mp_limb_t ws[2 * (TOOM3_MUL_THRESHOLD_LIMIT-1) + 2 * BITS_PER_MP_LIMB]; -#else - mp_limb_t ws[2 * (TOOM3_MUL_THRESHOLD-1) + 2 * BITS_PER_MP_LIMB]; -#endif - mpn_kara_mul_n (p, a, b, n, ws); - } -#if WANT_FFT || TUNE_PROGRAM_BUILD - else if (n < FFT_MUL_THRESHOLD) -#else - else -#endif - { - /* Use workspace of unknown size in heap, as stack space may - * be limited. Since n is at least TOOM3_MUL_THRESHOLD, the - * multiplication will take much longer than malloc()/free(). */ - mp_limb_t wsLen, *ws; - wsLen = 2 * n + 3 * BITS_PER_MP_LIMB; - ws = (mp_ptr) (*_mp_allocate_func) ((size_t) wsLen * sizeof (mp_limb_t)); - mpn_toom3_mul_n (p, a, b, n, ws); - (*_mp_free_func) (ws, (size_t) wsLen * sizeof (mp_limb_t)); - } -#if WANT_FFT || TUNE_PROGRAM_BUILD - else - { - mpn_mul_fft_full (p, a, n, b, n); - } -#endif -} diff --git a/rts/gmp/mpn/generic/perfsqr.c b/rts/gmp/mpn/generic/perfsqr.c deleted file mode 100644 index 42ee340..0000000 --- a/rts/gmp/mpn/generic/perfsqr.c +++ /dev/null @@ -1,123 +0,0 @@ -/* mpn_perfect_square_p(u,usize) -- Return non-zero if U is a perfect square, - zero otherwise. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* sq_res_0x100[x mod 0x100] == 1 iff x mod 0x100 is a quadratic residue - modulo 0x100. */ -static unsigned char const sq_res_0x100[0x100] = -{ - 1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -}; - -int -#if __STDC__ -mpn_perfect_square_p (mp_srcptr up, mp_size_t usize) -#else -mpn_perfect_square_p (up, usize) - mp_srcptr up; - mp_size_t usize; -#endif -{ - mp_limb_t rem; - mp_ptr root_ptr; - int res; - TMP_DECL (marker); - - /* The first test excludes 55/64 (85.9%) of the perfect square candidates - in O(1) time. */ - if ((sq_res_0x100[(unsigned int) up[0] % 0x100] & 1) == 0) - return 0; - -#if defined (PP) - /* The second test excludes 30652543/30808063 (99.5%) of the remaining - perfect square candidates in O(n) time. */ - - /* Firstly, compute REM = A mod PP. */ - if (UDIV_TIME > (2 * UMUL_TIME + 6)) - rem = mpn_preinv_mod_1 (up, usize, (mp_limb_t) PP, (mp_limb_t) PP_INVERTED); - else - rem = mpn_mod_1 (up, usize, (mp_limb_t) PP); - - /* Now decide if REM is a quadratic residue modulo the factors in PP. */ - - /* If A is just a few limbs, computing the square root does not take long - time, so things might run faster if we limit this loop according to the - size of A. */ - -#if BITS_PER_MP_LIMB == 64 - if (((CNST_LIMB(0x12DD703303AED3) >> rem % 53) & 1) == 0) - return 0; - if (((CNST_LIMB(0x4351B2753DF) >> rem % 47) & 1) == 0) - return 0; - if (((CNST_LIMB(0x35883A3EE53) >> rem % 43) & 1) == 0) - return 0; - if (((CNST_LIMB(0x1B382B50737) >> rem % 41) & 1) == 0) - return 0; - if (((CNST_LIMB(0x165E211E9B) >> rem % 37) & 1) == 0) - return 0; - if (((CNST_LIMB(0x121D47B7) >> rem % 31) & 1) == 0) - return 0; -#endif - if (((0x13D122F3L >> rem % 29) & 1) == 0) - return 0; - if (((0x5335FL >> rem % 23) & 1) == 0) - return 0; - if (((0x30AF3L >> rem % 19) & 1) == 0) - return 0; - if (((0x1A317L >> rem % 17) & 1) == 0) - return 0; - if (((0x161BL >> rem % 13) & 1) == 0) - return 0; - if (((0x23BL >> rem % 11) & 1) == 0) - return 0; - if (((0x017L >> rem % 7) & 1) == 0) - return 0; - if (((0x13L >> rem % 5) & 1) == 0) - return 0; - if (((0x3L >> rem % 3) & 1) == 0) - return 0; -#endif - - TMP_MARK (marker); - - /* For the third and last test, we finally compute the square root, - to make sure we've really got a perfect square. */ - root_ptr = (mp_ptr) TMP_ALLOC ((usize + 1) / 2 * BYTES_PER_MP_LIMB); - - /* Iff mpn_sqrtrem returns zero, the square is perfect. */ - res = ! mpn_sqrtrem (root_ptr, NULL, up, usize); - TMP_FREE (marker); - return res; -} diff --git a/rts/gmp/mpn/generic/popcount.c b/rts/gmp/mpn/generic/popcount.c deleted file mode 100644 index 387be95..0000000 --- a/rts/gmp/mpn/generic/popcount.c +++ /dev/null @@ -1,93 +0,0 @@ -/* popcount.c - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if defined __GNUC__ -/* No processor claiming to be SPARC v9 compliant seem to - implement the POPC instruction. Disable pattern for now. */ -#if 0 && defined __sparc_v9__ && BITS_PER_MP_LIMB == 64 -#define popc_limb(a) \ - ({ \ - DItype __res; \ - asm ("popc %1,%0" : "=r" (__res) : "rI" (a)); \ - __res; \ - }) -#endif -#endif - -#ifndef popc_limb - -/* Cool population count of a mp_limb_t. - You have to figure out how this works, I won't tell you! */ - -static inline unsigned int -#if __STDC__ -popc_limb (mp_limb_t x) -#else -popc_limb (x) - mp_limb_t x; -#endif -{ -#if BITS_PER_MP_LIMB == 64 - /* We have to go into some trouble to define these constants. - (For mp_limb_t being `long long'.) */ - mp_limb_t cnst; - cnst = 0xaaaaaaaaL | ((mp_limb_t) 0xaaaaaaaaL << BITS_PER_MP_LIMB/2); - x -= (x & cnst) >> 1; - cnst = 0x33333333L | ((mp_limb_t) 0x33333333L << BITS_PER_MP_LIMB/2); - x = ((x & ~cnst) >> 2) + (x & cnst); - cnst = 0x0f0f0f0fL | ((mp_limb_t) 0x0f0f0f0fL << BITS_PER_MP_LIMB/2); - x = ((x >> 4) + x) & cnst; - x = ((x >> 8) + x); - x = ((x >> 16) + x); - x = ((x >> 32) + x) & 0xff; -#endif -#if BITS_PER_MP_LIMB == 32 - x -= (x & 0xaaaaaaaa) >> 1; - x = ((x >> 2) & 0x33333333L) + (x & 0x33333333L); - x = ((x >> 4) + x) & 0x0f0f0f0fL; - x = ((x >> 8) + x); - x = ((x >> 16) + x) & 0xff; -#endif - return x; -} -#endif - -unsigned long int -#if __STDC__ -mpn_popcount (register mp_srcptr p, register mp_size_t size) -#else -mpn_popcount (p, size) - register mp_srcptr p; - register mp_size_t size; -#endif -{ - unsigned long int popcnt; - mp_size_t i; - - popcnt = 0; - for (i = 0; i < size; i++) - popcnt += popc_limb (p[i]); - - return popcnt; -} diff --git a/rts/gmp/mpn/generic/pre_mod_1.c b/rts/gmp/mpn/generic/pre_mod_1.c deleted file mode 100644 index 2717968..0000000 --- a/rts/gmp/mpn/generic/pre_mod_1.c +++ /dev/null @@ -1,69 +0,0 @@ -/* mpn_preinv_mod_1 (dividend_ptr, dividend_size, divisor_limb, - divisor_limb_inverted) -- - Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by the normalized DIVISOR_LIMB. - DIVISOR_LIMB_INVERTED should be 2^(2*BITS_PER_MP_LIMB) / DIVISOR_LIMB + - - 2^BITS_PER_MP_LIMB. - Return the single-limb remainder. - -Copyright (C) 1991, 1993, 1994, Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef UMUL_TIME -#define UMUL_TIME 1 -#endif - -#ifndef UDIV_TIME -#define UDIV_TIME UMUL_TIME -#endif - -mp_limb_t -#if __STDC__ -mpn_preinv_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size, - mp_limb_t divisor_limb, mp_limb_t divisor_limb_inverted) -#else -mpn_preinv_mod_1 (dividend_ptr, dividend_size, divisor_limb, divisor_limb_inverted) - mp_srcptr dividend_ptr; - mp_size_t dividend_size; - mp_limb_t divisor_limb; - mp_limb_t divisor_limb_inverted; -#endif -{ - mp_size_t i; - mp_limb_t n0, r; - int dummy; - - i = dividend_size - 1; - r = dividend_ptr[i]; - - if (r >= divisor_limb) - r = 0; - else - i--; - - for (; i >= 0; i--) - { - n0 = dividend_ptr[i]; - udiv_qrnnd_preinv (dummy, r, r, n0, divisor_limb, divisor_limb_inverted); - } - return r; -} diff --git a/rts/gmp/mpn/generic/random.c b/rts/gmp/mpn/generic/random.c deleted file mode 100644 index dea4e20..0000000 --- a/rts/gmp/mpn/generic/random.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpn_random -- Generate random numbers. - -Copyright (C) 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void -#if __STDC__ -mpn_random (mp_ptr res_ptr, mp_size_t size) -#else -mpn_random (res_ptr, size) - mp_ptr res_ptr; - mp_size_t size; -#endif -{ - mp_size_t i; - - for (i = 0; i < size; i++) - res_ptr[i] = urandom (); - - /* Make sure the most significant limb is non-zero. */ - while (res_ptr[size - 1] == 0) - res_ptr[size - 1] = urandom (); -} diff --git a/rts/gmp/mpn/generic/random2.c b/rts/gmp/mpn/generic/random2.c deleted file mode 100644 index 86682f8..0000000 --- a/rts/gmp/mpn/generic/random2.c +++ /dev/null @@ -1,105 +0,0 @@ -/* mpn_random2 -- Generate random numbers with relatively long strings - of ones and zeroes. Suitable for border testing. - -Copyright (C) 1992, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -#if defined (__hpux) || defined (__alpha) || defined (__svr4__) || defined (__SVR4) -/* HPUX lacks random(). DEC OSF/1 1.2 random() returns a double. */ -long mrand48 (); -static inline long -random () -{ - return mrand48 (); -} -#elif defined(_WIN32) && !(defined(__CYGWIN__) || defined(__CYGWIN32__)) -/* MS CRT supplies just the poxy rand(), with an upper bound of 0x7fff */ -static inline unsigned long -random () -{ - return rand () ^ (rand () << 16) ^ (rand() << 32); -} - -#else -long random (); -#endif - -/* It's a bit tricky to get this right, so please test the code well - if you hack with it. Some early versions of the function produced - random numbers with the leading limb == 0, and some versions never - made the most significant bit set. */ - -void -#if __STDC__ -mpn_random2 (mp_ptr res_ptr, mp_size_t size) -#else -mpn_random2 (res_ptr, size) - mp_ptr res_ptr; - mp_size_t size; -#endif -{ - int n_bits; - int bit_pos; - mp_size_t limb_pos; - unsigned int ran; - mp_limb_t limb; - - limb = 0; - - /* Start off in a random bit position in the most significant limb. */ - bit_pos = random () & (BITS_PER_MP_LIMB - 1); - - /* Least significant bit of RAN chooses string of ones/string of zeroes. - Make most significant limb be non-zero by setting bit 0 of RAN. */ - ran = random () | 1; - - for (limb_pos = size - 1; limb_pos >= 0; ) - { - n_bits = (ran >> 1) % BITS_PER_MP_LIMB + 1; - if ((ran & 1) != 0) - { - /* Generate a string of ones. */ - if (n_bits >= bit_pos) - { - res_ptr[limb_pos--] = limb | ((((mp_limb_t) 2) << bit_pos) - 1); - bit_pos += BITS_PER_MP_LIMB; - limb = (~(mp_limb_t) 0) << (bit_pos - n_bits); - } - else - { - limb |= ((((mp_limb_t) 1) << n_bits) - 1) << (bit_pos - n_bits + 1); - } - } - else - { - /* Generate a string of zeroes. */ - if (n_bits >= bit_pos) - { - res_ptr[limb_pos--] = limb; - limb = 0; - bit_pos += BITS_PER_MP_LIMB; - } - } - bit_pos -= n_bits; - ran = random (); - } -} diff --git a/rts/gmp/mpn/generic/rshift.c b/rts/gmp/mpn/generic/rshift.c deleted file mode 100644 index 59caf73..0000000 --- a/rts/gmp/mpn/generic/rshift.c +++ /dev/null @@ -1,88 +0,0 @@ -/* mpn_rshift -- Shift right a low-level natural-number integer. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right - and store the USIZE least significant limbs of the result at WP. - The bits shifted out to the right are returned. - - Argument constraints: - 1. 0 < CNT < BITS_PER_MP_LIMB - 2. If the result is to be written over the input, WP must be <= UP. -*/ - -mp_limb_t -#if __STDC__ -mpn_rshift (register mp_ptr wp, - register mp_srcptr up, mp_size_t usize, - register unsigned int cnt) -#else -mpn_rshift (wp, up, usize, cnt) - register mp_ptr wp; - register mp_srcptr up; - mp_size_t usize; - register unsigned int cnt; -#endif -{ - register mp_limb_t high_limb, low_limb; - register unsigned sh_1, sh_2; - register mp_size_t i; - mp_limb_t retval; - -#ifdef DEBUG - if (usize == 0 || cnt == 0) - abort (); -#endif - - sh_1 = cnt; - -#if 0 - if (sh_1 == 0) - { - if (wp != up) - { - /* Copy from low end to high end, to allow specified input/output - overlapping. */ - for (i = 0; i < usize; i++) - wp[i] = up[i]; - } - return usize; - } -#endif - - wp -= 1; - sh_2 = BITS_PER_MP_LIMB - sh_1; - high_limb = up[0]; - retval = high_limb << sh_2; - low_limb = high_limb; - - for (i = 1; i < usize; i++) - { - high_limb = up[i]; - wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); - low_limb = high_limb; - } - wp[i] = low_limb >> sh_1; - - return retval; -} diff --git a/rts/gmp/mpn/generic/sb_divrem_mn.c b/rts/gmp/mpn/generic/sb_divrem_mn.c deleted file mode 100644 index a269e34..0000000 --- a/rts/gmp/mpn/generic/sb_divrem_mn.c +++ /dev/null @@ -1,201 +0,0 @@ -/* mpn_sb_divrem_mn -- Divide natural numbers, producing both remainder and - quotient. - - 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 GNU MP RELEASE. - - -Copyright (C) 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write - the NSIZE-DSIZE least significant quotient limbs at QP - and the DSIZE long remainder at NP. If QEXTRA_LIMBS 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: - 0. NSIZE >= DSIZE. - 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 + DSIZE >= NP must hold true. (This means that it's - possible to put the quotient in the high part of NUM, right after the - remainder in NUM. - 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero. - 4. DSIZE >= 2. */ - - -#define PREINVERT_VIABLE \ - (UDIV_TIME > 2 * UMUL_TIME + 6 /* && ! TARGET_REGISTER_STARVED */) - -mp_limb_t -#if __STDC__ -mpn_sb_divrem_mn (mp_ptr qp, - mp_ptr np, mp_size_t nsize, - mp_srcptr dp, mp_size_t dsize) -#else -mpn_sb_divrem_mn (qp, np, nsize, dp, dsize) - mp_ptr qp; - mp_ptr np; - mp_size_t nsize; - mp_srcptr dp; - mp_size_t dsize; -#endif -{ - mp_limb_t most_significant_q_limb = 0; - mp_size_t i; - mp_limb_t dx, d1, n0; - mp_limb_t dxinv; - int have_preinv; - - ASSERT_ALWAYS (dsize > 2); - - np += nsize - dsize; - dx = dp[dsize - 1]; - d1 = dp[dsize - 2]; - n0 = np[dsize - 1]; - - if (n0 >= dx) - { - if (n0 > dx || mpn_cmp (np, dp, dsize - 1) >= 0) - { - mpn_sub_n (np, np, dp, dsize); - most_significant_q_limb = 1; - } - } - - /* If multiplication is much faster than division, preinvert the - most significant divisor limb before entering the loop. */ - if (PREINVERT_VIABLE) - { - have_preinv = 0; - if ((UDIV_TIME - (2 * UMUL_TIME + 6)) * (nsize - dsize) > UDIV_TIME) - { - invert_limb (dxinv, dx); - have_preinv = 1; - } - } - - for (i = nsize - dsize - 1; i >= 0; i--) - { - mp_limb_t q; - mp_limb_t nx; - mp_limb_t cy_limb; - - nx = np[dsize - 1]; - np--; - - if (nx == dx) - { - /* This might over-estimate q, but it's probably not worth - the extra code here to find out. */ - q = ~(mp_limb_t) 0; - -#if 1 - cy_limb = mpn_submul_1 (np, dp, dsize, q); -#else - /* This should be faster on many machines */ - cy_limb = mpn_sub_n (np + 1, np + 1, dp, dsize); - cy = mpn_add_n (np, np, dp, dsize); - np[dsize] += cy; -#endif - - if (nx != cy_limb) - { - mpn_add_n (np, np, dp, dsize); - q--; - } - - qp[i] = q; - } - else - { - mp_limb_t rx, r1, r0, p1, p0; - - /* "workaround" avoids a problem with gcc 2.7.2.3 i386 register - usage when np[dsize-1] is used in an asm statement like - umul_ppmm in udiv_qrnnd_preinv. The symptom is seg faults due - to registers being clobbered. gcc 2.95 i386 doesn't have the - problem. */ - { - mp_limb_t workaround = np[dsize - 1]; - if (PREINVERT_VIABLE && have_preinv) - udiv_qrnnd_preinv (q, r1, nx, workaround, dx, dxinv); - else - udiv_qrnnd (q, r1, nx, workaround, dx); - } - umul_ppmm (p1, p0, d1, q); - - r0 = np[dsize - 2]; - rx = 0; - if (r1 < p1 || (r1 == p1 && r0 < p0)) - { - p1 -= p0 < d1; - p0 -= d1; - q--; - r1 += dx; - rx = r1 < dx; - } - - p1 += r0 < p0; /* cannot carry! */ - rx -= r1 < p1; /* may become 11..1 if q is still too large */ - r1 -= p1; - r0 -= p0; - - cy_limb = mpn_submul_1 (np, dp, dsize - 2, q); - - { - mp_limb_t cy1, cy2; - cy1 = r0 < cy_limb; - r0 -= cy_limb; - cy2 = r1 < cy1; - r1 -= cy1; - np[dsize - 1] = r1; - np[dsize - 2] = r0; - if (cy2 != rx) - { - mpn_add_n (np, np, dp, dsize); - q--; - } - } - qp[i] = q; - } - } - - /* ______ ______ ______ - |__rx__|__r1__|__r0__| partial remainder - ______ ______ - - |__p1__|__p0__| partial product to subtract - ______ ______ - - |______|cylimb| - - rx is -1, 0 or 1. If rx=1, then q is correct (it should match - carry out). If rx=-1 then q is too large. If rx=0, then q might - be too large, but it is most likely correct. - */ - - return most_significant_q_limb; -} diff --git a/rts/gmp/mpn/generic/scan0.c b/rts/gmp/mpn/generic/scan0.c deleted file mode 100644 index 96f05ce..0000000 --- a/rts/gmp/mpn/generic/scan0.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_scan0 -- Scan from a given bit position for the next clear bit. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Design issues: - 1. What if starting_bit is not within U? Caller's problem? - 2. Bit index should be 'unsigned'? - - Argument constraints: - 1. U must sooner ot later have a limb with a clear bit. - */ - -unsigned long int -#if __STDC__ -mpn_scan0 (register mp_srcptr up, - register unsigned long int starting_bit) -#else -mpn_scan0 (up, starting_bit) - register mp_srcptr up; - register unsigned long int starting_bit; -#endif -{ - 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 / BITS_PER_MP_LIMB; - p = up + starting_word; - alimb = ~*p++; - - /* Mask off any bits before STARTING_BIT in the first limb. */ - alimb &= - (mp_limb_t) 1 << (starting_bit % BITS_PER_MP_LIMB); - - while (alimb == 0) - alimb = ~*p++; - - count_leading_zeros (cnt, alimb & -alimb); - return (p - up) * BITS_PER_MP_LIMB - 1 - cnt; -} diff --git a/rts/gmp/mpn/generic/scan1.c b/rts/gmp/mpn/generic/scan1.c deleted file mode 100644 index 98e2e0d..0000000 --- a/rts/gmp/mpn/generic/scan1.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_scan1 -- Scan from a given bit position for the next set bit. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Design issues: - 1. What if starting_bit is not within U? Caller's problem? - 2. Bit index should be 'unsigned'? - - Argument constraints: - 1. U must sooner ot later have a limb != 0. - */ - -unsigned long int -#if __STDC__ -mpn_scan1 (register mp_srcptr up, - register unsigned long int starting_bit) -#else -mpn_scan1 (up, starting_bit) - register mp_srcptr up; - register unsigned long int starting_bit; -#endif -{ - 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 / BITS_PER_MP_LIMB; - p = up + starting_word; - alimb = *p++; - - /* Mask off any bits before STARTING_BIT in the first limb. */ - alimb &= - (mp_limb_t) 1 << (starting_bit % BITS_PER_MP_LIMB); - - while (alimb == 0) - alimb = *p++; - - count_leading_zeros (cnt, alimb & -alimb); - return (p - up) * BITS_PER_MP_LIMB - 1 - cnt; -} diff --git a/rts/gmp/mpn/generic/set_str.c b/rts/gmp/mpn/generic/set_str.c deleted file mode 100644 index e6ccc92..0000000 --- a/rts/gmp/mpn/generic/set_str.c +++ /dev/null @@ -1,159 +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. - -Copyright (C) 1991, 1992, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_size_t -#if __STDC__ -mpn_set_str (mp_ptr xp, const unsigned char *str, size_t str_len, int base) -#else -mpn_set_str (xp, str, str_len, base) - mp_ptr xp; - const unsigned char *str; - size_t str_len; - int base; -#endif -{ - mp_size_t size; - mp_limb_t big_base; - int indigits_per_limb; - mp_limb_t res_digit; - - big_base = __mp_bases[base].big_base; - indigits_per_limb = __mp_bases[base].chars_per_limb; - -/* size = str_len / indigits_per_limb + 1; */ - - size = 0; - - if ((base & (base - 1)) == 0) - { - /* 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; - int bits_per_indigit = big_base; - - 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; - next_bitpos += bits_per_indigit; - if (next_bitpos >= BITS_PER_MP_LIMB) - { - xp[size++] = res_digit; - next_bitpos -= BITS_PER_MP_LIMB; - res_digit = inp_digit >> (bits_per_indigit - next_bitpos); - } - } - - if (res_digit != 0) - xp[size++] = res_digit; - } - else - { - /* General case. The base is not a power of 2. */ - - size_t i; - int j; - mp_limb_t cy_limb; - - for (i = indigits_per_limb; i < str_len; i += indigits_per_limb) - { - res_digit = *str++; - if (base == 10) - { /* This is a common case. - Help the compiler to avoid multiplication. */ - for (j = 1; j < indigits_per_limb; j++) - res_digit = res_digit * 10 + *str++; - } - else - { - for (j = 1; j < indigits_per_limb; j++) - res_digit = res_digit * base + *str++; - } - - if (size == 0) - { - if (res_digit != 0) - { - xp[0] = res_digit; - size = 1; - } - } - else - { - cy_limb = mpn_mul_1 (xp, xp, size, big_base); - cy_limb += mpn_add_1 (xp, xp, size, res_digit); - if (cy_limb != 0) - xp[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 = 1; j < str_len - (i - indigits_per_limb); j++) - { - res_digit = res_digit * 10 + *str++; - big_base *= 10; - } - } - else - { - for (j = 1; j < str_len - (i - indigits_per_limb); j++) - { - res_digit = res_digit * base + *str++; - big_base *= base; - } - } - - if (size == 0) - { - if (res_digit != 0) - { - xp[0] = res_digit; - size = 1; - } - } - else - { - cy_limb = mpn_mul_1 (xp, xp, size, big_base); - cy_limb += mpn_add_1 (xp, xp, size, res_digit); - if (cy_limb != 0) - xp[size++] = cy_limb; - } - } - - return size; -} diff --git a/rts/gmp/mpn/generic/sqr_basecase.c b/rts/gmp/mpn/generic/sqr_basecase.c deleted file mode 100644 index 760258a..0000000 --- a/rts/gmp/mpn/generic/sqr_basecase.c +++ /dev/null @@ -1,83 +0,0 @@ -/* mpn_sqr_basecase -- Internal routine to square 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 (C) 1991, 1992, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpn_sqr_basecase (mp_ptr prodp, mp_srcptr up, mp_size_t n) -#else -mpn_sqr_basecase (prodp, up, n) - mp_ptr prodp; - mp_srcptr up; - mp_size_t n; -#endif -{ - mp_size_t i; - - { - /* N.B.! We need the superfluous indirection through argh to work around - a reloader bug in GCC 2.7.*. */ - mp_limb_t x; - mp_limb_t argh; - x = up[0]; - umul_ppmm (argh, prodp[0], x, x); - prodp[1] = argh; - } - if (n > 1) - { - mp_limb_t tarr[2 * KARATSUBA_SQR_THRESHOLD]; - mp_ptr tp = tarr; - mp_limb_t cy; - - /* must fit 2*n limbs in tarr */ - ASSERT (n <= KARATSUBA_SQR_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; - } - for (i = 1; i < n; i++) - { - mp_limb_t x; - x = up[i]; - umul_ppmm (prodp[2 * i + 1], prodp[2 * i], x, x); - } - { - mp_limb_t cy; - cy = mpn_lshift (tp, tp, 2 * n - 2, 1); - cy += mpn_add_n (prodp + 1, prodp + 1, tp, 2 * n - 2); - prodp[2 * n - 1] += cy; - } - } -} diff --git a/rts/gmp/mpn/generic/sqrtrem.c b/rts/gmp/mpn/generic/sqrtrem.c deleted file mode 100644 index ee3b514..0000000 --- a/rts/gmp/mpn/generic/sqrtrem.c +++ /dev/null @@ -1,509 +0,0 @@ -/* mpn_sqrtrem (root_ptr, rem_ptr, op_ptr, op_size) - - Write the square root of {OP_PTR, OP_SIZE} at ROOT_PTR. - Write the remainder at REM_PTR, if REM_PTR != NULL. - Return the size of the remainder. - (The size of the root is always half of the size of the operand.) - - OP_PTR and ROOT_PTR may not point to the same object. - OP_PTR and REM_PTR may point to the same object. - - If REM_PTR is NULL, only the root is computed and the return value of - the function is 0 if OP is a perfect square, and *any* non-zero number - otherwise. - -Copyright (C) 1993, 1994, 1996, 1997, 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* This code is just correct if "unsigned char" has at least 8 bits. It - doesn't help to use CHAR_BIT from limits.h, as the real problem is - the static arrays. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* Square root algorithm: - - 1. Shift OP (the input) to the left an even number of bits s.t. there - are an even number of words and either (or both) of the most - significant bits are set. This way, sqrt(OP) has exactly half as - many words as OP, and has its most significant bit set. - - 2. Get a 9-bit approximation to sqrt(OP) using the pre-computed tables. - This approximation is used for the first single-precision - iterations of Newton's method, yielding a full-word approximation - to sqrt(OP). - - 3. Perform multiple-precision Newton iteration until we have the - exact result. Only about half of the input operand is used in - this calculation, as the square root is perfectly determinable - from just the higher half of a number. */ - -/* Define this macro for IEEE P854 machines with a fast sqrt instruction. */ -#if defined __GNUC__ && ! defined __SOFT_FLOAT - -#if defined (__sparc__) && BITS_PER_MP_LIMB == 32 -#define SQRT(a) \ - ({ \ - double __sqrt_res; \ - asm ("fsqrtd %1,%0" : "=f" (__sqrt_res) : "f" (a)); \ - __sqrt_res; \ - }) -#endif - -#if defined (__HAVE_68881__) -#define SQRT(a) \ - ({ \ - double __sqrt_res; \ - asm ("fsqrtx %1,%0" : "=f" (__sqrt_res) : "f" (a)); \ - __sqrt_res; \ - }) -#endif - -#if defined (__hppa) && BITS_PER_MP_LIMB == 32 -#define SQRT(a) \ - ({ \ - double __sqrt_res; \ - asm ("fsqrt,dbl %1,%0" : "=fx" (__sqrt_res) : "fx" (a)); \ - __sqrt_res; \ - }) -#endif - -#if defined (_ARCH_PWR2) && BITS_PER_MP_LIMB == 32 -#define SQRT(a) \ - ({ \ - double __sqrt_res; \ - asm ("fsqrt %0,%1" : "=f" (__sqrt_res) : "f" (a)); \ - __sqrt_res; \ - }) -#endif - -#if 0 -#if defined (__i386__) || defined (__i486__) -#define SQRT(a) \ - ({ \ - double __sqrt_res; \ - asm ("fsqrt" : "=t" (__sqrt_res) : "0" (a)); \ - __sqrt_res; \ - }) -#endif -#endif - -#endif - -#ifndef SQRT - -/* Tables for initial approximation of the square root. These are - indexed with bits 1-8 of the operand for which the square root is - calculated, where bit 0 is the most significant non-zero bit. I.e. - the most significant one-bit is not used, since that per definition - is one. Likewise, the tables don't return the highest bit of the - result. That bit must be inserted by or:ing the returned value with - 0x100. This way, we get a 9-bit approximation from 8-bit tables! */ - -/* Table to be used for operands with an even total number of bits. - (Exactly as in the decimal system there are similarities between the - square root of numbers with the same initial digits and an even - difference in the total number of digits. Consider the square root - of 1, 10, 100, 1000, ...) */ -static const unsigned char even_approx_tab[256] = -{ - 0x6a, 0x6a, 0x6b, 0x6c, 0x6c, 0x6d, 0x6e, 0x6e, - 0x6f, 0x70, 0x71, 0x71, 0x72, 0x73, 0x73, 0x74, - 0x75, 0x75, 0x76, 0x77, 0x77, 0x78, 0x79, 0x79, - 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e, 0x7f, - 0x80, 0x80, 0x81, 0x81, 0x82, 0x83, 0x83, 0x84, - 0x85, 0x85, 0x86, 0x87, 0x87, 0x88, 0x89, 0x89, - 0x8a, 0x8b, 0x8b, 0x8c, 0x8d, 0x8d, 0x8e, 0x8f, - 0x8f, 0x90, 0x90, 0x91, 0x92, 0x92, 0x93, 0x94, - 0x94, 0x95, 0x96, 0x96, 0x97, 0x97, 0x98, 0x99, - 0x99, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9e, - 0x9e, 0x9f, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2, 0xa3, - 0xa3, 0xa4, 0xa4, 0xa5, 0xa6, 0xa6, 0xa7, 0xa7, - 0xa8, 0xa9, 0xa9, 0xaa, 0xaa, 0xab, 0xac, 0xac, - 0xad, 0xad, 0xae, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, - 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb5, 0xb5, 0xb6, - 0xb6, 0xb7, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xba, - 0xbb, 0xbb, 0xbc, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, - 0xc0, 0xc0, 0xc1, 0xc1, 0xc2, 0xc2, 0xc3, 0xc3, - 0xc4, 0xc5, 0xc5, 0xc6, 0xc6, 0xc7, 0xc7, 0xc8, - 0xc9, 0xc9, 0xca, 0xca, 0xcb, 0xcb, 0xcc, 0xcc, - 0xcd, 0xce, 0xce, 0xcf, 0xcf, 0xd0, 0xd0, 0xd1, - 0xd1, 0xd2, 0xd3, 0xd3, 0xd4, 0xd4, 0xd5, 0xd5, - 0xd6, 0xd6, 0xd7, 0xd7, 0xd8, 0xd9, 0xd9, 0xda, - 0xda, 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xdd, 0xde, - 0xde, 0xdf, 0xe0, 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, - 0xe3, 0xe3, 0xe4, 0xe4, 0xe5, 0xe5, 0xe6, 0xe6, - 0xe7, 0xe7, 0xe8, 0xe8, 0xe9, 0xea, 0xea, 0xeb, - 0xeb, 0xec, 0xec, 0xed, 0xed, 0xee, 0xee, 0xef, - 0xef, 0xf0, 0xf0, 0xf1, 0xf1, 0xf2, 0xf2, 0xf3, - 0xf3, 0xf4, 0xf4, 0xf5, 0xf5, 0xf6, 0xf6, 0xf7, - 0xf7, 0xf8, 0xf8, 0xf9, 0xf9, 0xfa, 0xfa, 0xfb, - 0xfb, 0xfc, 0xfc, 0xfd, 0xfd, 0xfe, 0xfe, 0xff, -}; - -/* Table to be used for operands with an odd total number of bits. - (Further comments before previous table.) */ -static const unsigned char odd_approx_tab[256] = -{ - 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, - 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x06, 0x07, - 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, - 0x0b, 0x0c, 0x0c, 0x0d, 0x0d, 0x0e, 0x0e, 0x0f, - 0x0f, 0x10, 0x10, 0x10, 0x11, 0x11, 0x12, 0x12, - 0x13, 0x13, 0x14, 0x14, 0x15, 0x15, 0x16, 0x16, - 0x16, 0x17, 0x17, 0x18, 0x18, 0x19, 0x19, 0x1a, - 0x1a, 0x1b, 0x1b, 0x1b, 0x1c, 0x1c, 0x1d, 0x1d, - 0x1e, 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x20, 0x21, - 0x21, 0x22, 0x22, 0x23, 0x23, 0x23, 0x24, 0x24, - 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x27, 0x28, - 0x28, 0x29, 0x29, 0x2a, 0x2a, 0x2a, 0x2b, 0x2b, - 0x2c, 0x2c, 0x2d, 0x2d, 0x2d, 0x2e, 0x2e, 0x2f, - 0x2f, 0x30, 0x30, 0x30, 0x31, 0x31, 0x32, 0x32, - 0x32, 0x33, 0x33, 0x34, 0x34, 0x35, 0x35, 0x35, - 0x36, 0x36, 0x37, 0x37, 0x37, 0x38, 0x38, 0x39, - 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, - 0x3c, 0x3d, 0x3d, 0x3d, 0x3e, 0x3e, 0x3f, 0x3f, - 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, - 0x43, 0x43, 0x43, 0x44, 0x44, 0x45, 0x45, 0x45, - 0x46, 0x46, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, - 0x49, 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, - 0x4c, 0x4c, 0x4d, 0x4d, 0x4e, 0x4e, 0x4e, 0x4f, - 0x4f, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52, - 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x55, - 0x55, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x58, - 0x58, 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, - 0x5b, 0x5b, 0x5c, 0x5c, 0x5d, 0x5d, 0x5d, 0x5e, - 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, - 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, - 0x64, 0x64, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, - 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, -}; -#endif - - -mp_size_t -#if __STDC__ -mpn_sqrtrem (mp_ptr root_ptr, mp_ptr rem_ptr, mp_srcptr op_ptr, mp_size_t op_size) -#else -mpn_sqrtrem (root_ptr, rem_ptr, op_ptr, op_size) - mp_ptr root_ptr; - mp_ptr rem_ptr; - mp_srcptr op_ptr; - mp_size_t op_size; -#endif -{ - /* R (root result) */ - mp_ptr rp; /* Pointer to least significant word */ - mp_size_t rsize; /* The size in words */ - - /* T (OP shifted to the left a.k.a. normalized) */ - mp_ptr tp; /* Pointer to least significant word */ - mp_size_t tsize; /* The size in words */ - mp_ptr t_end_ptr; /* Pointer right beyond most sign. word */ - mp_limb_t t_high0, t_high1; /* The two most significant words */ - - /* TT (temporary for numerator/remainder) */ - mp_ptr ttp; /* Pointer to least significant word */ - - /* X (temporary for quotient in main loop) */ - mp_ptr xp; /* Pointer to least significant word */ - mp_size_t xsize; /* The size in words */ - - unsigned cnt; - mp_limb_t initial_approx; /* Initially made approximation */ - mp_size_t tsizes[BITS_PER_MP_LIMB]; /* Successive calculation precisions */ - mp_size_t tmp; - mp_size_t i; - - mp_limb_t cy_limb; - TMP_DECL (marker); - - /* If OP is zero, both results are zero. */ - if (op_size == 0) - return 0; - - count_leading_zeros (cnt, op_ptr[op_size - 1]); - tsize = op_size; - if ((tsize & 1) != 0) - { - cnt += BITS_PER_MP_LIMB; - tsize++; - } - - rsize = tsize / 2; - rp = root_ptr; - - TMP_MARK (marker); - - /* Shift OP an even number of bits into T, such that either the most or - the second most significant bit is set, and such that the number of - words in T becomes even. This way, the number of words in R=sqrt(OP) - is exactly half as many as in OP, and the most significant bit of R - is set. - - Also, the initial approximation is simplified by this up-shifted OP. - - Finally, the Newtonian iteration which is the main part of this - program performs division by R. The fast division routine expects - the divisor to be "normalized" in exactly the sense of having the - most significant bit set. */ - - tp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB); - - if ((cnt & ~1) % BITS_PER_MP_LIMB != 0) - t_high0 = mpn_lshift (tp + cnt / BITS_PER_MP_LIMB, op_ptr, op_size, - (cnt & ~1) % BITS_PER_MP_LIMB); - else - MPN_COPY (tp + cnt / BITS_PER_MP_LIMB, op_ptr, op_size); - - if (cnt >= BITS_PER_MP_LIMB) - tp[0] = 0; - - t_high0 = tp[tsize - 1]; - t_high1 = tp[tsize - 2]; /* Never stray. TSIZE is >= 2. */ - -/* Is there a fast sqrt instruction defined for this machine? */ -#ifdef SQRT - { - initial_approx = SQRT (t_high0 * MP_BASE_AS_DOUBLE + t_high1); - /* If t_high0,,t_high1 is big, the result in INITIAL_APPROX might have - become incorrect due to overflow in the conversion from double to - mp_limb_t above. It will typically be zero in that case, but might be - a small number on some machines. The most significant bit of - INITIAL_APPROX should be set, so that bit is a good overflow - indication. */ - if ((mp_limb_signed_t) initial_approx >= 0) - initial_approx = ~(mp_limb_t)0; - } -#else - /* Get a 9 bit approximation from the tables. The tables expect to - be indexed with the 8 high bits right below the highest bit. - Also, the highest result bit is not returned by the tables, and - must be or:ed into the result. The scheme gives 9 bits of start - approximation with just 256-entry 8 bit tables. */ - - if ((cnt & 1) == 0) - { - /* The most significant bit of t_high0 is set. */ - initial_approx = t_high0 >> (BITS_PER_MP_LIMB - 8 - 1); - initial_approx &= 0xff; - initial_approx = even_approx_tab[initial_approx]; - } - else - { - /* The most significant bit of t_high0 is unset, - the second most significant is set. */ - initial_approx = t_high0 >> (BITS_PER_MP_LIMB - 8 - 2); - initial_approx &= 0xff; - initial_approx = odd_approx_tab[initial_approx]; - } - initial_approx |= 0x100; - initial_approx <<= BITS_PER_MP_LIMB - 8 - 1; - - /* Perform small precision Newtonian iterations to get a full word - approximation. For small operands, these iterations will do the - entire job. */ - if (t_high0 == ~(mp_limb_t)0) - initial_approx = t_high0; - else - { - mp_limb_t quot; - - if (t_high0 >= initial_approx) - initial_approx = t_high0 + 1; - - /* First get about 18 bits with pure C arithmetics. */ - quot = t_high0 / (initial_approx >> BITS_PER_MP_LIMB/2) << BITS_PER_MP_LIMB/2; - initial_approx = (initial_approx + quot) / 2; - initial_approx |= (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1); - - /* Now get a full word by one (or for > 36 bit machines) several - iterations. */ - for (i = 18; i < BITS_PER_MP_LIMB; i <<= 1) - { - mp_limb_t ignored_remainder; - - udiv_qrnnd (quot, ignored_remainder, - t_high0, t_high1, initial_approx); - initial_approx = (initial_approx + quot) / 2; - initial_approx |= (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1); - } - } -#endif - - rp[0] = initial_approx; - rsize = 1; - -#ifdef SQRT_DEBUG - printf ("\n\nT = "); - mpn_dump (tp, tsize); -#endif - - if (tsize > 2) - { - /* Determine the successive precisions to use in the iteration. We - minimize the precisions, beginning with the highest (i.e. last - iteration) to the lowest (i.e. first iteration). */ - - xp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB); - ttp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB); - - t_end_ptr = tp + tsize; - - tmp = tsize / 2; - for (i = 0;; i++) - { - tsize = (tmp + 1) / 2; - if (tmp == tsize) - break; - tsizes[i] = tsize + tmp; - tmp = tsize; - } - - /* Main Newton iteration loop. For big arguments, most of the - time is spent here. */ - - /* It is possible to do a great optimization here. The successive - divisors in the mpn_divmod call below have more and more leading - words equal to its predecessor. Therefore the beginning of - each division will repeat the same work as did the last - division. If we could guarantee that the leading words of two - consecutive divisors are the same (i.e. in this case, a later - divisor has just more digits at the end) it would be a simple - matter of just using the old remainder of the last division in - a subsequent division, to take care of this optimization. This - idea would surely make a difference even for small arguments. */ - - /* Loop invariants: - - R <= shiftdown_to_same_size(floor(sqrt(OP))) < R + 1. - X - 1 < shiftdown_to_same_size(floor(sqrt(OP))) <= X. - R <= shiftdown_to_same_size(X). */ - - while (--i >= 0) - { - mp_limb_t cy; -#ifdef SQRT_DEBUG - mp_limb_t old_least_sign_r = rp[0]; - mp_size_t old_rsize = rsize; - - printf ("R = "); - mpn_dump (rp, rsize); -#endif - tsize = tsizes[i]; - - /* Need to copy the numerator into temporary space, as - mpn_divmod overwrites its numerator argument with the - remainder (which we currently ignore). */ - MPN_COPY (ttp, t_end_ptr - tsize, tsize); - cy = mpn_divmod (xp, ttp, tsize, rp, rsize); - xsize = tsize - rsize; - -#ifdef SQRT_DEBUG - printf ("X =%d ", cy); - mpn_dump (xp, xsize); -#endif - - /* Add X and R with the most significant limbs aligned, - temporarily ignoring at least one limb at the low end of X. */ - tmp = xsize - rsize; - cy += mpn_add_n (xp + tmp, rp, xp + tmp, rsize); - - /* If T begins with more than 2 x BITS_PER_MP_LIMB of ones, we get - intermediate roots that'd need an extra bit. We don't want to - handle that since it would make the subsequent divisor - non-normalized, so round such roots down to be only ones in the - current precision. */ - if (cy == 2) - { - mp_size_t j; - for (j = xsize; j >= 0; j--) - xp[j] = ~(mp_limb_t)0; - } - - /* Divide X by 2 and put the result in R. This is the new - approximation. Shift in the carry from the addition. */ - mpn_rshift (rp, xp, xsize, 1); - rp[xsize - 1] |= ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1)); - rsize = xsize; -#ifdef SQRT_DEBUG - if (old_least_sign_r != rp[rsize - old_rsize]) - printf (">>>>>>>> %d: %0*lX, %0*lX <<<<<<<<\n", - i, 2 * BYTES_PER_MP_LIMB, old_least_sign_r, - 2 * BYTES_PER_MP_LIMB, rp[rsize - old_rsize]); -#endif - } - } - -#ifdef SQRT_DEBUG - printf ("(final) R = "); - mpn_dump (rp, rsize); -#endif - - /* We computed the square root of OP * 2**(2*floor(cnt/2)). - This has resulted in R being 2**floor(cnt/2) to large. - Shift it down here to fix that. */ - if (cnt / 2 != 0) - { - mpn_rshift (rp, rp, rsize, cnt/2); - rsize -= rp[rsize - 1] == 0; - } - - /* Calculate the remainder. */ - mpn_mul_n (tp, rp, rp, rsize); - tsize = rsize + rsize; - tsize -= tp[tsize - 1] == 0; - if (op_size < tsize - || (op_size == tsize && mpn_cmp (op_ptr, tp, op_size) < 0)) - { - /* R is too large. Decrement it. */ - - /* These operations can't overflow. */ - cy_limb = mpn_sub_n (tp, tp, rp, rsize); - cy_limb += mpn_sub_n (tp, tp, rp, rsize); - mpn_decr_u (tp + rsize, cy_limb); - mpn_incr_u (tp, (mp_limb_t) 1); - - mpn_decr_u (rp, (mp_limb_t) 1); - -#ifdef SQRT_DEBUG - printf ("(adjusted) R = "); - mpn_dump (rp, rsize); -#endif - } - - if (rem_ptr != NULL) - { - cy_limb = mpn_sub (rem_ptr, op_ptr, op_size, tp, tsize); - MPN_NORMALIZE (rem_ptr, op_size); - TMP_FREE (marker); - return op_size; - } - else - { - int res; - res = op_size != tsize || mpn_cmp (op_ptr, tp, op_size); - TMP_FREE (marker); - return res; - } -} diff --git a/rts/gmp/mpn/generic/sub_n.c b/rts/gmp/mpn/generic/sub_n.c deleted file mode 100644 index 4f2f060..0000000 --- a/rts/gmp/mpn/generic/sub_n.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpn_sub_n -- Subtract two limb vectors of equal, non-zero length. - -Copyright (C) 1992, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -#if __STDC__ -mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size) -#else -mpn_sub_n (res_ptr, s1_ptr, s2_ptr, size) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - register mp_srcptr s2_ptr; - mp_size_t size; -#endif -{ - register mp_limb_t x, y, cy; - register mp_size_t j; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -size; - - /* Offset the base pointers to compensate for the negative indices. */ - s1_ptr -= j; - s2_ptr -= j; - res_ptr -= j; - - cy = 0; - do - { - y = s2_ptr[j]; - x = s1_ptr[j]; - y += cy; /* add previous carry to subtrahend */ - cy = (y < cy); /* get out carry from that addition */ - y = x - y; /* main subtract */ - cy = (y > x) + cy; /* get out carry from the subtract, combine */ - res_ptr[j] = y; - } - while (++j != 0); - - return cy; -} diff --git a/rts/gmp/mpn/generic/submul_1.c b/rts/gmp/mpn/generic/submul_1.c deleted file mode 100644 index c7c08ee..0000000 --- a/rts/gmp/mpn/generic/submul_1.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mpn_submul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR - by S2_LIMB, subtract the S1_SIZE least significant limbs of the product - from the limb vector pointed to by RES_PTR. Return the most significant - limb of the product, adjusted for carry-out from the subtraction. - -Copyright (C) 1992, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_submul_1 (res_ptr, s1_ptr, s1_size, s2_limb) - register mp_ptr res_ptr; - register mp_srcptr s1_ptr; - mp_size_t s1_size; - register mp_limb_t s2_limb; -{ - register mp_limb_t cy_limb; - register mp_size_t j; - register mp_limb_t prod_high, prod_low; - register mp_limb_t x; - - /* The loop counter and index J goes from -SIZE to -1. This way - the loop becomes faster. */ - j = -s1_size; - - /* Offset the base pointers to compensate for the negative indices. */ - res_ptr -= j; - s1_ptr -= j; - - cy_limb = 0; - do - { - umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb); - - prod_low += cy_limb; - cy_limb = (prod_low < cy_limb) + prod_high; - - x = res_ptr[j]; - prod_low = x - prod_low; - cy_limb += (prod_low > x); - res_ptr[j] = prod_low; - } - while (++j != 0); - - return cy_limb; -} diff --git a/rts/gmp/mpn/generic/tdiv_qr.c b/rts/gmp/mpn/generic/tdiv_qr.c deleted file mode 100644 index b748b5d..0000000 --- a/rts/gmp/mpn/generic/tdiv_qr.c +++ /dev/null @@ -1,401 +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 accordningly. The input - operands are unaffected. - - Preconditions: - 1. The most significant limb of of the divisor must be non-zero. - 2. No argument overlap is permitted. (??? relax this ???) - 3. 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 (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD (7 * KARATSUBA_MUL_THRESHOLD) -#endif - -/* Extract the middle limb from ((h,,l) << cnt) */ -#define SHL(h,l,cnt) \ - ((h << cnt) | ((l >> 1) >> ((~cnt) & (BITS_PER_MP_LIMB - 1)))) - -void -#if __STDC__ -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) -#else -mpn_tdiv_qr (qp, rp, qxn, np, nn, dp, dn) - mp_ptr qp; - mp_ptr rp; - mp_size_t qxn; - mp_srcptr np; - mp_size_t nn; - mp_srcptr dp; - mp_size_t dn; -#endif -{ - /* FIXME: - 1. qxn - 2. pass allocated storage in additional parameter? - */ - if (qxn != 0) - abort (); - - switch (dn) - { - case 0: - DIVIDE_BY_ZERO; - - case 1: - { - rp[0] = mpn_divmod_1 (qp, np, nn, dp[0]); - return; - } - - case 2: - { - int cnt; - mp_ptr n2p, d2p; - mp_limb_t qhl, cy; - TMP_DECL (marker); - TMP_MARK (marker); - count_leading_zeros (cnt, dp[dn - 1]); - if (cnt != 0) - { - d2p = (mp_ptr) TMP_ALLOC (dn * BYTES_PER_MP_LIMB); - mpn_lshift (d2p, dp, dn, cnt); - n2p = (mp_ptr) TMP_ALLOC ((nn + 1) * BYTES_PER_MP_LIMB); - 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-dn+1 quotient limbs */ - } - else - { - d2p = (mp_ptr) dp; - n2p = (mp_ptr) TMP_ALLOC (nn * BYTES_PER_MP_LIMB); - MPN_COPY (n2p, np, nn); - qhl = mpn_divrem_2 (qp, 0L, n2p, nn, d2p); - qp[nn - 2] = qhl; /* always store nn-dn+1 quotient limbs */ - } - - if (cnt != 0) - mpn_rshift (rp, n2p, dn, cnt); - else - MPN_COPY (rp, n2p, dn); - TMP_FREE (marker); - return; - } - - default: - { - int adjust; - TMP_DECL (marker); - TMP_MARK (marker); - 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; - count_leading_zeros (cnt, dp[dn - 1]); - - qp[nn - dn] = 0; /* zero high quotient limb */ - if (cnt != 0) /* normalize divisor if needed */ - { - d2p = (mp_ptr) TMP_ALLOC (dn * BYTES_PER_MP_LIMB); - mpn_lshift (d2p, dp, dn, cnt); - n2p = (mp_ptr) TMP_ALLOC ((nn + 1) * BYTES_PER_MP_LIMB); - cy = mpn_lshift (n2p, np, nn, cnt); - n2p[nn] = cy; - nn += adjust; - } - else - { - d2p = (mp_ptr) dp; - n2p = (mp_ptr) TMP_ALLOC ((nn + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (n2p, np, nn); - n2p[nn] = 0; - nn += adjust; - } - - if (dn == 2) - mpn_divrem_2 (qp, 0L, n2p, nn, d2p); - else if (dn < BZ_THRESHOLD) - mpn_sb_divrem_mn (qp, n2p, nn, d2p, dn); - else - { - /* Perform 2*dn / dn limb divisions as long as the limbs - in np last. */ - mp_ptr q2p = qp + nn - 2 * dn; - n2p += nn - 2 * dn; - mpn_bz_divrem_n (q2p, n2p, d2p, dn); - nn -= dn; - while (nn >= 2 * dn) - { - mp_limb_t c; - q2p -= dn; n2p -= dn; - c = mpn_bz_divrem_n (q2p, n2p, d2p, dn); - ASSERT_ALWAYS (c == 0); - nn -= dn; - } - - if (nn != dn) - { - n2p -= nn - dn; - /* In theory, we could fall out to the cute code below - since we now have exactly the situation that code - is designed to handle. We botch this badly and call - the basic mpn_sb_divrem_mn! */ - if (dn == 2) - mpn_divrem_2 (qp, 0L, n2p, nn, d2p); - else - mpn_sb_divrem_mn (qp, n2p, nn, d2p, dn); - } - } - - - if (cnt != 0) - mpn_rshift (rp, n2p, dn, cnt); - else - MPN_COPY (rp, n2p, dn); - TMP_FREE (marker); - 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 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. It is assumed that the most significant - limb of the numerator is smaller than the most significant limb - of the denominator. - - 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 a 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; - 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 (marker); - 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. */ - count_leading_zeros (cnt, dp[dn - 1]); - if (cnt != 0) - { - d2p = (mp_ptr) TMP_ALLOC (qn * BYTES_PER_MP_LIMB); - - mpn_lshift (d2p, dp + in, qn, cnt); - d2p[0] |= dp[in - 1] >> (BITS_PER_MP_LIMB - cnt); - - n2p = (mp_ptr) TMP_ALLOC ((2 * qn + 1) * BYTES_PER_MP_LIMB); - 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] >> (BITS_PER_MP_LIMB - cnt); - } - } - else - { - d2p = (mp_ptr) dp + in; - - n2p = (mp_ptr) TMP_ALLOC ((2 * qn + 1) * BYTES_PER_MP_LIMB); - 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; - mp_limb_t gcc272bug_n1, gcc272bug_n0, gcc272bug_d0; - /* Due to a gcc 2.7.2.3 reload pass bug, we have to use some - temps here. This doesn't hurt code quality on any machines - so we do it unconditionally. */ - gcc272bug_n1 = n2p[1]; - gcc272bug_n0 = n2p[0]; - gcc272bug_d0 = d2p[0]; - udiv_qrnnd (q0, r0, gcc272bug_n1, gcc272bug_n0, gcc272bug_d0); - n2p[0] = r0; - qp[0] = q0; - } - else if (qn == 2) - mpn_divrem_2 (qp, 0L, n2p, 4L, d2p); - else if (qn < BZ_THRESHOLD) - mpn_sb_divrem_mn (qp, n2p, qn * 2, d2p, qn); - else - mpn_bz_divrem_n (qp, n2p, d2p, 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, l; - - if (in - 2 < 0) - dl = 0; - else - dl = dp[in - 2]; - - x = SHL (dp[in - 1], dl, cnt); - umul_ppmm (h, l, x, qp[qn - 1]); - - 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, BITS_PER_MP_LIMB - cnt); - n2p[0] |= np[in - 1] & (~(mp_limb_t) 0 >> cnt); - - /* Update partial remainder with partially used divisor limb. */ - cy2 = mpn_submul_1 (n2p, qp, qn, dp[in - 1] & (~(mp_limb_t) 0 >> cnt)); - if (qn != rn) - { - if (n2p[qn] < cy2) - abort (); - n2p[qn] -= cy2; - } - else - { - n2p[qn] = cy1 - cy2; - - quotient_too_large = (cy1 < cy2); - ++rn; - } - --in; - } - /* True: partial remainder now is neutral, i.e., it is not shifted up. */ - - tp = (mp_ptr) TMP_ALLOC (dn * BYTES_PER_MP_LIMB); - - if (in < qn) - { - if (in == 0) - { - MPN_COPY (rp, n2p, rn); - if (rn != dn) - abort (); - 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 (marker); - return; - } - } -} diff --git a/rts/gmp/mpn/generic/udiv_w_sdiv.c b/rts/gmp/mpn/generic/udiv_w_sdiv.c deleted file mode 100644 index 061cce8..0000000 --- a/rts/gmp/mpn/generic/udiv_w_sdiv.c +++ /dev/null @@ -1,131 +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 (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -mp_limb_t -mpn_udiv_w_sdiv (rp, a1, a0, d) - mp_limb_t *rp, a1, a0, d; -{ - mp_limb_t q, r; - mp_limb_t c0, c1, b1; - - if ((mp_limb_signed_t) d >= 0) - { - if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 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 << (BITS_PER_MP_LIMB - 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 << (BITS_PER_MP_LIMB - 1); - } - } - else - { - b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ - c1 = a1 >> 1; /* A/2 */ - c0 = (a1 << (BITS_PER_MP_LIMB - 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 = -1; - r = a0 + d; - } - else - { - q = -2; - r = a0 + 2*d; - } - } - } - - *rp = r; - return q; -} diff --git a/rts/gmp/mpn/hppa/README b/rts/gmp/mpn/hppa/README deleted file mode 100644 index 97e7abe..0000000 --- a/rts/gmp/mpn/hppa/README +++ /dev/null @@ -1,91 +0,0 @@ -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. diff --git a/rts/gmp/mpn/hppa/add_n.s b/rts/gmp/mpn/hppa/add_n.s deleted file mode 100644 index c53b2f7..0000000 --- a/rts/gmp/mpn/hppa/add_n.s +++ /dev/null @@ -1,58 +0,0 @@ -; HP-PA __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; One might want to unroll this as for other processors, but it turns -; out that the data cache contention after a store makes such -; unrolling useless. We can't come under 5 cycles/limb anyway. - - .code - .export __gmpn_add_n -__gmpn_add_n - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,= -1,%r23,L$end ; check for (SIZE == 1) - add %r20,%r19,%r28 ; add first limbs ignoring cy - -L$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 - -L$end stws %r28,0(0,%r26) - bv 0(%r2) - addc %r0,%r0,%r28 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/gmp-mparam.h b/rts/gmp/mpn/hppa/gmp-mparam.h deleted file mode 100644 index 98b6d9c..0000000 --- a/rts/gmp/mpn/hppa/gmp-mparam.h +++ /dev/null @@ -1,63 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values are for the PA7100 using GCC. */ -/* Generated by tuneup.c, 2000-07-25. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 30 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 172 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 59 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 185 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 96 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 122 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 18 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 46 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 33 -#endif diff --git a/rts/gmp/mpn/hppa/hppa1_1/addmul_1.s b/rts/gmp/mpn/hppa/hppa1_1/addmul_1.s deleted file mode 100644 index c7d218f..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/addmul_1.s +++ /dev/null @@ -1,102 +0,0 @@ -; HP-PA-1.1 __gmpn_addmul_1 -- Multiply a limb vector with a limb and -; add the result to a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr r26 -; s1_ptr r25 -; size r24 -; s2_limb r23 - -; This runs at 11 cycles/limb on a PA7000. With the used instructions, it -; can not become faster due to data cache contention after a store. On the -; PA7100 it runs at 10 cycles/limb, and that can not be improved either, -; since only the xmpyu does not need the integer pipeline, so the only -; dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -; on the PA7100. - -; There are some ideas described in mul_1.s that applies to this code too. - - .code - .export __gmpn_addmul_1 -__gmpn_addmul_1 - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ; move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ; ... into fr4 - add %r0,%r0,%r0 ; clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 ; least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -; Main loop -L$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 - -L$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 - -L$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 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/mul_1.s b/rts/gmp/mpn/hppa/hppa1_1/mul_1.s deleted file mode 100644 index 4512fdd..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/mul_1.s +++ /dev/null @@ -1,98 +0,0 @@ -; HP-PA-1.1 __gmpn_mul_1 -- Multiply a limb vector with a limb and store -; the result in a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr r26 -; s1_ptr r25 -; size r24 -; s2_limb r23 - -; This runs at 9 cycles/limb on a PA7000. With the used instructions, it can -; not become faster due to data cache contention after a store. On the -; PA7100 it runs at 7 cycles/limb, and that can not be improved either, since -; only the xmpyu does not need the integer pipeline, so the only dual-issue -; we will get are addc+xmpyu. Unrolling would not help either CPU. - -; We could use fldds to read two limbs at a time from the S1 array, and that -; could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and -; PA7100, respectively. We don't do that since it does not seem worth the -; (alignment) troubles... - -; At least the PA7100 is rumored to be able to deal with cache-misses -; without stalling instruction issue. If this is true, and the cache is -; actually also lockup-free, we should use a deeper software pipeline, and -; load from S1 very early! (The loads and stores to -12(sp) will surely be -; in the cache.) - - .code - .export __gmpn_mul_1 -__gmpn_mul_1 - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ; move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ; ... into fr4 - add %r0,%r0,%r0 ; clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 ; least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -; Main loop -L$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 - -L$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 - -L$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) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/add_n.s b/rts/gmp/mpn/hppa/hppa1_1/pa7100/add_n.s deleted file mode 100644 index 4f4be08..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/add_n.s +++ /dev/null @@ -1,75 +0,0 @@ -; HP-PA __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. -; This is optimized for the PA7100, where is runs at 4.25 cycles/limb - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - - .code - .export __gmpn_add_n -__gmpn_add_n - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,<= -5,%r23,L$rest - add %r20,%r19,%r28 ; add first limbs ignoring cy - -L$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 - -L$rest addib,= 4,%r23,L$end - nop -L$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 - -L$end stws %r28,0(0,%r26) - bv 0(%r2) - addc %r0,%r0,%r28 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/addmul_1.S b/rts/gmp/mpn/hppa/hppa1_1/pa7100/addmul_1.S deleted file mode 100644 index 04db068..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/addmul_1.S +++ /dev/null @@ -1,189 +0,0 @@ -; HP-PA 7100/7200 __gmpn_addmul_1 -- Multiply a limb vector with a limb and -; add the result to a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define res_ptr %r26 -#define s1_ptr %r25 -#define size %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 /* safe to reuse */ -#define hi2 %r29 -#define hi3 %r1 - - .code - .export __gmpn_addmul_1 -__gmpn_addmul_1 - .proc - .callinfo frame=128,no_calls - .entry - - ldo 128(%r30),%r30 - stws s2_limb,-16(%r30) - add %r0,%r0,cylimb ; clear cy and cylimb - addib,< -4,size,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,L$few_limbs - stws,ma s0,4(res_ptr) - -; start software pipeline ---------------------------------------------------- -L$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,L$end - addc %r0,hi3,cylimb ; propagate carry into cylimb -; main loop ------------------------------------------------------------------ -L$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,L$loop - addc %r0,hi3,cylimb ; propagate carry into cylimb -; finish software pipeline --------------------------------------------------- -L$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) - -; restore callee-saves registers --------------------------------------------- - ldw -96(%r30),%r3 - ldw -92(%r30),%r4 - ldw -88(%r30),%r5 - ldw -84(%r30),%r6 - ldw -80(%r30),%r7 - -L$few_limbs - addib,=,n 4,size,L$ret -L$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,L$loop2 - nop - -L$ret addc %r0,cylimb,cylimb - bv 0(%r2) - ldo -128(%r30),%r30 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/lshift.s b/rts/gmp/mpn/hppa/hppa1_1/pa7100/lshift.s deleted file mode 100644 index 31669b1..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/lshift.s +++ /dev/null @@ -1,83 +0,0 @@ -; HP-PA __gmpn_lshift -- -; This is optimized for the PA7100, where is runs at 3.25 cycles/limb - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s_ptr gr25 -; size gr24 -; cnt gr23 - - .code - .export __gmpn_lshift -__gmpn_lshift - .proc - .callinfo frame=64,no_calls - .entry - - 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 ; compute carry out limb - ldws,mb -4(0,%r25),%r29 - addib,<= -5,%r24,L$rest - vshd %r22,%r29,%r20 - -L$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 - -L$rest addib,= 4,%r24,L$end1 - nop -L$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 - -L$end1 stws,mb %r20,-4(0,%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) -L$end2 stws,mb %r20,-4(0,%r26) -L$0004 vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/rshift.s b/rts/gmp/mpn/hppa/hppa1_1/pa7100/rshift.s deleted file mode 100644 index d32b10b..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/rshift.s +++ /dev/null @@ -1,80 +0,0 @@ -; HP-PA __gmpn_rshift -- -; This is optimized for the PA7100, where is runs at 3.25 cycles/limb - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s_ptr gr25 -; size gr24 -; cnt gr23 - - .code - .export __gmpn_rshift -__gmpn_rshift - .proc - .callinfo frame=64,no_calls - .entry - - ldws,ma 4(0,%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L$0004 - vshd %r22,%r0,%r28 ; compute carry out limb - ldws,ma 4(0,%r25),%r29 - addib,<= -5,%r24,L$rest - vshd %r29,%r22,%r20 - -L$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 - -L$rest addib,= 4,%r24,L$end1 - nop -L$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 - -L$end1 stws,ma %r20,4(0,%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) -L$end2 stws,ma %r20,4(0,%r26) -L$0004 vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/sub_n.s b/rts/gmp/mpn/hppa/hppa1_1/pa7100/sub_n.s deleted file mode 100644 index 0eec41c..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/sub_n.s +++ /dev/null @@ -1,76 +0,0 @@ -; HP-PA __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. -; This is optimized for the PA7100, where is runs at 4.25 cycles/limb - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - - .code - .export __gmpn_sub_n -__gmpn_sub_n - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,<= -5,%r23,L$rest - sub %r20,%r19,%r28 ; subtract first limbs ignoring cy - -L$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 - -L$rest addib,= 4,%r23,L$end - nop -L$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 - -L$end stws %r28,0(0,%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/pa7100/submul_1.S b/rts/gmp/mpn/hppa/hppa1_1/pa7100/submul_1.S deleted file mode 100644 index 0fba21d..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/pa7100/submul_1.S +++ /dev/null @@ -1,195 +0,0 @@ -; HP-PA 7100/7200 __gmpn_submul_1 -- Multiply a limb vector with a limb and -; subtract the result from a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define res_ptr %r26 -#define s1_ptr %r25 -#define size %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 /* safe to reuse */ -#define hi2 %r29 -#define hi3 %r1 - - .code - .export __gmpn_submul_1 -__gmpn_submul_1 - .proc - .callinfo frame=128,no_calls - .entry - - ldo 128(%r30),%r30 - stws s2_limb,-16(%r30) - add %r0,%r0,cylimb ; clear cy and cylimb - addib,< -4,size,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 ; invert cy - addib,< -1,size,L$few_limbs - stws,ma s0,4(res_ptr) - -; start software pipeline ---------------------------------------------------- -L$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,L$end - addc %r0,hi3,cylimb ; propagate carry into cylimb -; main loop ------------------------------------------------------------------ -L$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 ; these two insns ... - add lo0,lo0,%r0 ; ... 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,L$loop - addc %r0,hi3,cylimb ; propagate carry into cylimb -; finish software pipeline --------------------------------------------------- -L$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 ; these two insns ... - add lo0,lo0,%r0 ; ... invert cy - -; restore callee-saves registers --------------------------------------------- - ldw -96(%r30),%r3 - ldw -92(%r30),%r4 - ldw -88(%r30),%r5 - ldw -84(%r30),%r6 - ldw -80(%r30),%r7 - -L$few_limbs - addib,=,n 4,size,L$ret -L$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 ; invert cy - stws,ma s0,4(res_ptr) - addib,<> -1,size,L$loop2 - nop - -L$ret addc %r0,cylimb,cylimb - bv 0(%r2) - ldo -128(%r30),%r30 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/submul_1.s b/rts/gmp/mpn/hppa/hppa1_1/submul_1.s deleted file mode 100644 index 20a5b5c..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/submul_1.s +++ /dev/null @@ -1,111 +0,0 @@ -; HP-PA-1.1 __gmpn_submul_1 -- Multiply a limb vector with a limb and -; subtract the result from a second limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr r26 -; s1_ptr r25 -; size r24 -; s2_limb r23 - -; This runs at 12 cycles/limb on a PA7000. With the used instructions, it -; can not become faster due to data cache contention after a store. On the -; PA7100 it runs at 11 cycles/limb, and that can not be improved either, -; since only the xmpyu does not need the integer pipeline, so the only -; dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -; on the PA7100. - -; There are some ideas described in mul_1.s that applies to this code too. - -; It seems possible to make this run as fast as __gmpn_addmul_1, if we use -; sub,>>= %r29,%r19,%r22 -; addi 1,%r28,%r28 -; but that requires reworking the hairy software pipeline... - - .code - .export __gmpn_submul_1 -__gmpn_submul_1 - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ; move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ; ... into fr4 - add %r0,%r0,%r0 ; clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r19 ; least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -; Main loop -L$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 - -L$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 - -L$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 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/udiv_qrnnd.S b/rts/gmp/mpn/hppa/hppa1_1/udiv_qrnnd.S deleted file mode 100644 index b83d6f4..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/udiv_qrnnd.S +++ /dev/null @@ -1,80 +0,0 @@ -; HP-PA __udiv_qrnnd division support, used from longlong.h. -; This version runs fast on PA 7000 and later. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; rem_ptr gr26 -; n1 gr25 -; n0 gr24 -; d gr23 - - .code -L$0000 .word 0x43f00000 ; 2^64 - .word 0x0 - .export __gmpn_udiv_qrnnd -__gmpn_udiv_qrnnd - .proc - .callinfo frame=64,no_calls - .entry - ldo 64(%r30),%r30 - - stws %r25,-16(0,%r30) ; n_hi - stws %r24,-12(0,%r30) ; n_lo -#ifdef PIC - addil LT%L$0000,%r19 - ldo RT%L$0000(%r1),%r19 -#else - ldil L%L$0000,%r19 - ldo R%L$0000(%r19),%r19 -#endif - fldds -16(0,%r30),%fr5 - stws %r23,-12(0,%r30) - comib,<= 0,%r25,L$1 - fcnvxf,dbl,dbl %fr5,%fr5 - fldds 0(0,%r19),%fr4 - fadd,dbl %fr4,%fr5,%fr5 -L$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,%r19 - comib,= 0,%r19,L$2 - ldo -64(%r30),%r30 - - add %r22,%r23,%r22 - ldo -1(%r28),%r28 -L$2 bv 0(%r2) - stws %r22,0(0,%r26) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa1_1/umul.s b/rts/gmp/mpn/hppa/hppa1_1/umul.s deleted file mode 100644 index 1f1300a..0000000 --- a/rts/gmp/mpn/hppa/hppa1_1/umul.s +++ /dev/null @@ -1,42 +0,0 @@ -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - .code - .export __umul_ppmm - .align 4 -__umul_ppmm - .proc - .callinfo frame=64,no_calls - .entry - - 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 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/hppa2_0/add_n.s b/rts/gmp/mpn/hppa/hppa2_0/add_n.s deleted file mode 100644 index 6e97278..0000000 --- a/rts/gmp/mpn/hppa/hppa2_0/add_n.s +++ /dev/null @@ -1,88 +0,0 @@ -; HP-PA 2.0 32-bit __gmpn_add_n -- Add two limb vectors of the same length > 0 -; and store sum in a third limb vector. - -; Copyright (C) 1997, 1998, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .code - .export __gmpn_add_n -__gmpn_add_n - .proc - .callinfo frame=0,no_calls - .entry - - sub %r0,%r23,%r22 - zdep %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - zdep %r22,29,3,%r22 ; r22 = 4 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - sub %r26,%r22,%r26 ; offset res_ptr - blr %r28,%r0 ; branch into loop - add %r0,%r0,%r0 ; reset carry - -L$loop ldw 0(%r25),%r20 - ldw 0(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,0(%r26) -L$7 ldw 4(%r25),%r21 - ldw 4(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,4(%r26) -L$6 ldw 8(%r25),%r20 - ldw 8(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,8(%r26) -L$5 ldw 12(%r25),%r21 - ldw 12(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,12(%r26) -L$4 ldw 16(%r25),%r20 - ldw 16(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,16(%r26) -L$3 ldw 20(%r25),%r21 - ldw 20(%r24),%r19 - addc %r21,%r19,%r21 - stw %r21,20(%r26) -L$2 ldw 24(%r25),%r20 - ldw 24(%r24),%r31 - addc %r20,%r31,%r20 - stw %r20,24(%r26) -L$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) - .exit - addc %r0,%r0,%r28 - .procend diff --git a/rts/gmp/mpn/hppa/hppa2_0/sub_n.s b/rts/gmp/mpn/hppa/hppa2_0/sub_n.s deleted file mode 100644 index 7d9b50f..0000000 --- a/rts/gmp/mpn/hppa/hppa2_0/sub_n.s +++ /dev/null @@ -1,88 +0,0 @@ -; HP-PA 2.0 32-bit __gmpn_sub_n -- Subtract two limb vectors of the same -; length > 0 and store difference in a third limb vector. - -; Copyright (C) 1997, 1998, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .code - .export __gmpn_sub_n -__gmpn_sub_n - .proc - .callinfo frame=0,no_calls - .entry - - sub %r0,%r23,%r22 - zdep %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - zdep %r22,29,3,%r22 ; r22 = 4 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - blr %r28,%r0 ; branch into loop - sub %r26,%r22,%r26 ; offset res_ptr and set carry - -L$loop ldw 0(%r25),%r20 - ldw 0(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,0(%r26) -L$7 ldw 4(%r25),%r21 - ldw 4(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,4(%r26) -L$6 ldw 8(%r25),%r20 - ldw 8(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,8(%r26) -L$5 ldw 12(%r25),%r21 - ldw 12(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,12(%r26) -L$4 ldw 16(%r25),%r20 - ldw 16(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,16(%r26) -L$3 ldw 20(%r25),%r21 - ldw 20(%r24),%r19 - subb %r21,%r19,%r21 - stw %r21,20(%r26) -L$2 ldw 24(%r25),%r20 - ldw 24(%r24),%r31 - subb %r20,%r31,%r20 - stw %r20,24(%r26) -L$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) - .exit - subi 1,%r28,%r28 - .procend diff --git a/rts/gmp/mpn/hppa/lshift.s b/rts/gmp/mpn/hppa/lshift.s deleted file mode 100644 index f5a2daa..0000000 --- a/rts/gmp/mpn/hppa/lshift.s +++ /dev/null @@ -1,66 +0,0 @@ -; HP-PA __gmpn_lshift -- - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s_ptr gr25 -; size gr24 -; cnt gr23 - - .code - .export __gmpn_lshift -__gmpn_lshift - .proc - .callinfo frame=64,no_calls - .entry - - 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 ; compute carry out limb - ldws,mb -4(0,%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r22,%r29,%r20 - -L$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 - -L$0002 stws,mb %r20,-4(0,%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) -L$0003 stws,mb %r20,-4(0,%r26) -L$0004 vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(0,%r26) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/rshift.s b/rts/gmp/mpn/hppa/rshift.s deleted file mode 100644 index e05e2f1..0000000 --- a/rts/gmp/mpn/hppa/rshift.s +++ /dev/null @@ -1,63 +0,0 @@ -; HP-PA __gmpn_rshift -- - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s_ptr gr25 -; size gr24 -; cnt gr23 - - .code - .export __gmpn_rshift -__gmpn_rshift - .proc - .callinfo frame=64,no_calls - .entry - - ldws,ma 4(0,%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L$0004 - vshd %r22,%r0,%r28 ; compute carry out limb - ldws,ma 4(0,%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r29,%r22,%r20 - -L$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 - -L$0002 stws,ma %r20,4(0,%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) -L$0003 stws,ma %r20,4(0,%r26) -L$0004 vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(0,%r26) - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/sub_n.s b/rts/gmp/mpn/hppa/sub_n.s deleted file mode 100644 index 8f770ad..0000000 --- a/rts/gmp/mpn/hppa/sub_n.s +++ /dev/null @@ -1,59 +0,0 @@ -; HP-PA __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; One might want to unroll this as for other processors, but it turns -; out that the data cache contention after a store makes such -; unrolling useless. We can't come under 5 cycles/limb anyway. - - .code - .export __gmpn_sub_n -__gmpn_sub_n - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(0,%r25),%r20 - ldws,ma 4(0,%r24),%r19 - - addib,= -1,%r23,L$end ; check for (SIZE == 1) - sub %r20,%r19,%r28 ; subtract first limbs ignoring cy - -L$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 - -L$end stws %r28,0(0,%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 - - .exit - .procend diff --git a/rts/gmp/mpn/hppa/udiv_qrnnd.s b/rts/gmp/mpn/hppa/udiv_qrnnd.s deleted file mode 100644 index 9aa3b8a..0000000 --- a/rts/gmp/mpn/hppa/udiv_qrnnd.s +++ /dev/null @@ -1,286 +0,0 @@ -; HP-PA __udiv_qrnnd division support, used from longlong.h. -; This version runs fast on pre-PA7000 CPUs. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; rem_ptr gr26 -; n1 gr25 -; n0 gr24 -; d gr23 - -; The code size is a bit excessive. We could merge the last two ds;addc -; sequences by simply moving the "bb,< Odd" instruction down. The only -; trouble is the FFFFFFFF code that would need some hacking. - - .code - .export __gmpn_udiv_qrnnd -__gmpn_udiv_qrnnd - .proc - .callinfo frame=0,no_calls - .entry - - comb,< %r23,0,L$largedivisor - sub %r0,%r23,%r1 ; 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 - -L$largedivisor - extru %r24,31,1,%r19 ; r19 = n0 & 1 - bb,< %r23,31,L$odd - extru %r23,30,31,%r22 ; r22 = d >> 1 - shd %r25,%r24,1,%r24 ; r24 = new n0 - extru %r25,30,31,%r25 ; 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 - -L$odd addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1) - shd %r25,%r24,1,%r24 ; r24 = new n0 - extru %r25,30,31,%r25 ; 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 -; 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 - -; This is just a special case of the code above. -; We come here when d == 0xFFFFFFFF -L$FF.. 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 - - .exit - .procend diff --git a/rts/gmp/mpn/i960/README b/rts/gmp/mpn/i960/README deleted file mode 100644 index d68a0a8..0000000 --- a/rts/gmp/mpn/i960/README +++ /dev/null @@ -1,9 +0,0 @@ -This directory contains mpn functions for Intel i960 processors. - -RELEVANT OPTIMIZATION ISSUES - -The code in this directory is not well optimized. - -STATUS - -The code in this directory has not been tested. diff --git a/rts/gmp/mpn/i960/add_n.s b/rts/gmp/mpn/i960/add_n.s deleted file mode 100644 index 387317a..0000000 --- a/rts/gmp/mpn/i960/add_n.s +++ /dev/null @@ -1,43 +0,0 @@ -# I960 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -# sum in a third limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 4 - .globl ___gmpn_add_n -___gmpn_add_n: - mov 0,g6 # clear carry-save register - cmpo 1,0 # clear cy - -Loop: subo 1,g3,g3 # update loop counter - ld (g1),g5 # load from s1_ptr - addo 4,g1,g1 # s1_ptr++ - ld (g2),g4 # load from s2_ptr - addo 4,g2,g2 # s2_ptr++ - cmpo g6,1 # restore cy from g6, relies on cy being 0 - addc g4,g5,g4 # main add - subc 0,0,g6 # save cy in g6 - st g4,(g0) # store result to res_ptr - addo 4,g0,g0 # res_ptr++ - cmpobne 0,g3,Loop # when branch is taken, clears C bit - - mov g6,g0 - ret diff --git a/rts/gmp/mpn/i960/addmul_1.s b/rts/gmp/mpn/i960/addmul_1.s deleted file mode 100644 index 7df1418..0000000 --- a/rts/gmp/mpn/i960/addmul_1.s +++ /dev/null @@ -1,48 +0,0 @@ -# I960 __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 4 - .globl ___gmpn_mul_1 -___gmpn_mul_1: - subo g2,0,g2 - shlo 2,g2,g4 - subo g4,g1,g1 - subo g4,g0,g13 - mov 0,g0 - - cmpo 1,0 # clear C bit on AC.cc - -Loop: ld (g1)[g2*4],g5 - emul g3,g5,g6 - ld (g13)[g2*4],g5 - - addc g0,g6,g6 # relies on that C bit is clear - addc 0,g7,g7 - addc g5,g6,g6 # relies on that C bit is clear - st g6,(g13)[g2*4] - addc 0,g7,g0 - - addo g2,1,g2 - cmpobne 0,g2,Loop # when branch is taken, clears C bit - - ret diff --git a/rts/gmp/mpn/i960/mul_1.s b/rts/gmp/mpn/i960/mul_1.s deleted file mode 100644 index 5c0c985..0000000 --- a/rts/gmp/mpn/i960/mul_1.s +++ /dev/null @@ -1,45 +0,0 @@ -# I960 __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 4 - .globl ___gmpn_mul_1 -___gmpn_mul_1: - subo g2,0,g2 - shlo 2,g2,g4 - subo g4,g1,g1 - subo g4,g0,g13 - mov 0,g0 - - cmpo 1,0 # clear C bit on AC.cc - -Loop: ld (g1)[g2*4],g5 - emul g3,g5,g6 - - addc g0,g6,g6 # relies on that C bit is clear - st g6,(g13)[g2*4] - addc 0,g7,g0 - - addo g2,1,g2 - cmpobne 0,g2,Loop # when branch is taken, clears C bit - - ret diff --git a/rts/gmp/mpn/i960/sub_n.s b/rts/gmp/mpn/i960/sub_n.s deleted file mode 100644 index 2db2d46..0000000 --- a/rts/gmp/mpn/i960/sub_n.s +++ /dev/null @@ -1,43 +0,0 @@ -# I960 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -# store difference in a third limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 4 - .globl ___gmpn_sub_n -___gmpn_sub_n: - mov 1,g6 # set carry-save register - cmpo 1,0 # clear cy - -Loop: subo 1,g3,g3 # update loop counter - ld (g1),g5 # load from s1_ptr - addo 4,g1,g1 # s1_ptr++ - ld (g2),g4 # load from s2_ptr - addo 4,g2,g2 # s2_ptr++ - cmpo g6,1 # restore cy from g6, relies on cy being 0 - subc g4,g5,g4 # main subtract - subc 0,0,g6 # save cy in g6 - st g4,(g0) # store result to res_ptr - addo 4,g0,g0 # res_ptr++ - cmpobne 0,g3,Loop # when branch is taken, cy will be 0 - - mov g6,g0 - ret diff --git a/rts/gmp/mpn/lisp/gmpasm-mode.el b/rts/gmp/mpn/lisp/gmpasm-mode.el deleted file mode 100644 index 5d9da7f..0000000 --- a/rts/gmp/mpn/lisp/gmpasm-mode.el +++ /dev/null @@ -1,351 +0,0 @@ -;;; gmpasm-mode.el -- GNU MP asm and m4 editing mode. - - -;; Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -;; the Free Software Foundation; either version 2.1 of the License, or (at your -;; option) any later version. -;; -;; The GNU MP Library is distributed in the hope that it will be useful, but -;; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -;; License for more details. -;; -;; You should have received a copy of the GNU Lesser General Public License -;; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -;; MA 02111-1307, USA. - - -;;; Commentary: -;; -;; gmpasm-mode is an editing mode for 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 the -;; load-path and the following in .emacs -;; -;; (autoload 'gmpasm-mode "gmpasm-mode" nil t) -;; -;; To use gmpasm-mode automatically on all .asm and .m4 files, put the -;; following in .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 -;; ------- -;; -;; FSF Emacs 20.x - gmpasm-mode is designed for this. -;; XEmacs 20.x - seems to work. -;; -;; FSF Emacs 19.x - should work if replacements for some 20.x-isms are -;; available. comment-region with "C" won't really do the right thing -;; though. - - -;;; 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." - :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-delete-from-list (list-var element) - "(gmpasm-delete-from-list LIST-VAR ELEMENT) - -Delete ELEMENT from LIST-VAR, using `delete'. -This is like `add-to-list', but the element is deleted from the list. -The list is copied rather than changed in-place, so references to it elsewhere -won't be affected." - - (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'. - -m4 ignores quote marks in # comments at the top level, but inside quotes # -isn't special and all quotes are active. There seems no easy way to express -this in the syntax table, so nothing is done for comments. Usually this is -best, since it picks up invalid apostrophes in comments inside quotes.") - - -(defvar gmpasm-font-lock-keywords - (eval-when-compile - (list - (cons - (concat - "\\b" - (regexp-opt - '("deflit" "defreg" "defframe" "defframe_pushl" - "define_not_for_expansion" - "ASM_START" "ASM_END" "PROLOGUE" "EPILOGUE" - "forloop" - "TEXT" "DATA" "ALIGN" "W32" - "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 and LF don't look good fontified, so they're 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. - (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 "#". - ;; Only spaces or tabs match after, so newline isn't included in the - ;; font lock below. - (set (make-local-variable 'comment-start-skip) - (concat "\\(^\\|\\s-\\)" comment-regexp "[ \t]*")) - - ;; Comment fontification based on comment-start, matching through to the - ;; end of the line. - (add-to-list (make-local-variable 'gmpasm-font-lock-keywords) - (cons (concat - "\\(\\bdnl\\b\\|" comment-start-skip "\\).*$") - '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)) - - ;; 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) - (when (not 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 delete - ;; this from the list. The regexp for "1.", "2." etc is left - ;; though. - (gmpasm-delete-from-list 'gmpasm-filladapt-token-table - '("[0-9]+\\(\\.[0-9]+\\)+[ \t]" - bullet)) - - ;; "%" as a comment prefix interferes with x86 register names - ;; like %eax, so delete this. - (gmpasm-delete-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 BEG END &option 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/rts/gmp/mpn/m68k/add_n.S b/rts/gmp/mpn/m68k/add_n.S deleted file mode 100644 index 9e1d89d..0000000 --- a/rts/gmp/mpn/m68k/add_n.S +++ /dev/null @@ -1,79 +0,0 @@ -/* mc68020 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store - sum in a third limb vector. - -Copyright (C) 1992, 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s2_ptr (sp + 16) - size (sp + 12) -*/ - -#include "asm-syntax.h" - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_add_n) - -C_SYMBOL_NAME(__gmpn_add_n:) -PROLOG(__gmpn_add_n) -/* Save used registers on the stack. */ - movel R(d2),MEM_PREDEC(sp) - movel R(a2),MEM_PREDEC(sp) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,12),R(a2) - movel MEM_DISP(sp,16),R(a0) - movel MEM_DISP(sp,20),R(a1) - movel MEM_DISP(sp,24),R(d2) - - eorw #1,R(d2) - lsrl #1,R(d2) - bcc L(L1) - subql #1,R(d2) /* clears cy as side effect */ - -L(Loop:) - movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - addxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) -L(L1:) movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - addxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) - - dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ - subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ - subl #0x10000,R(d2) - bcs L(L2) - addl R(d0),R(d0) /* restore cy */ - bra L(Loop) - -L(L2:) - negl R(d0) - -/* Restore used registers from stack frame. */ - movel MEM_POSTINC(sp),R(a2) - movel MEM_POSTINC(sp),R(d2) - - rts -EPILOG(__gmpn_add_n) diff --git a/rts/gmp/mpn/m68k/lshift.S b/rts/gmp/mpn/m68k/lshift.S deleted file mode 100644 index a539d5d..0000000 --- a/rts/gmp/mpn/m68k/lshift.S +++ /dev/null @@ -1,150 +0,0 @@ -/* mc68020 __gmpn_lshift -- Shift left a low-level natural-number integer. - -Copyright (C) 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s_ptr (sp + 8) - s_size (sp + 16) - cnt (sp + 12) -*/ - -#include "asm-syntax.h" - -#define res_ptr a1 -#define s_ptr a0 -#define s_size d6 -#define cnt d4 - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_lshift) - -C_SYMBOL_NAME(__gmpn_lshift:) -PROLOG(__gmpn_lshift) - -/* Save used registers on the stack. */ - moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) - -/* Copy the arguments to registers. */ - movel MEM_DISP(sp,28),R(res_ptr) - movel MEM_DISP(sp,32),R(s_ptr) - movel MEM_DISP(sp,36),R(s_size) - movel MEM_DISP(sp,40),R(cnt) - - moveql #1,R(d5) - cmpl R(d5),R(cnt) - bne L(Lnormal) - cmpl R(s_ptr),R(res_ptr) - bls L(Lspecial) /* jump if s_ptr >= res_ptr */ -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(a2) -#else /* not mc68020 */ - movel R(s_size),R(d0) - asll #2,R(d0) - lea MEM_INDX(s_ptr,d0,l),R(a2) -#endif - cmpl R(res_ptr),R(a2) - bls L(Lspecial) /* jump if res_ptr >= s_ptr + s_size */ - -L(Lnormal:) - moveql #32,R(d5) - subl R(cnt),R(d5) - -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) - lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) -#else /* not mc68000 */ - movel R(s_size),R(d0) - asll #2,R(d0) - addl R(s_size),R(s_ptr) - addl R(s_size),R(res_ptr) -#endif - movel MEM_PREDEC(s_ptr),R(d2) - movel R(d2),R(d0) - lsrl R(d5),R(d0) /* compute carry limb */ - - lsll R(cnt),R(d2) - movel R(d2),R(d1) - subql #1,R(s_size) - beq L(Lend) - lsrl #1,R(s_size) - bcs L(L1) - subql #1,R(s_size) - -L(Loop:) - movel MEM_PREDEC(s_ptr),R(d2) - movel R(d2),R(d3) - lsrl R(d5),R(d3) - orl R(d3),R(d1) - movel R(d1),MEM_PREDEC(res_ptr) - lsll R(cnt),R(d2) -L(L1:) - movel MEM_PREDEC(s_ptr),R(d1) - movel R(d1),R(d3) - lsrl R(d5),R(d3) - orl R(d3),R(d2) - movel R(d2),MEM_PREDEC(res_ptr) - lsll R(cnt),R(d1) - - dbf R(s_size),L(Loop) - subl #0x10000,R(s_size) - bcc L(Loop) - -L(Lend:) - movel R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */ - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - rts - -/* We loop from least significant end of the arrays, which is only - permissable if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. */ - -L(Lspecial:) - clrl R(d0) /* initialize carry */ - eorw #1,R(s_size) - lsrl #1,R(s_size) - bcc L(LL1) - subql #1,R(s_size) - -L(LLoop:) - movel MEM_POSTINC(s_ptr),R(d2) - addxl R(d2),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) -L(LL1:) - movel MEM_POSTINC(s_ptr),R(d2) - addxl R(d2),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) - - dbf R(s_size),L(LLoop) - addxl R(d0),R(d0) /* save cy in lsb */ - subl #0x10000,R(s_size) - bcs L(LLend) - lsrl #1,R(d0) /* restore cy */ - bra L(LLoop) - -L(LLend:) -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - rts -EPILOG(__gmpn_lshift) diff --git a/rts/gmp/mpn/m68k/mc68020/addmul_1.S b/rts/gmp/mpn/m68k/mc68020/addmul_1.S deleted file mode 100644 index 6638115..0000000 --- a/rts/gmp/mpn/m68k/mc68020/addmul_1.S +++ /dev/null @@ -1,83 +0,0 @@ -/* mc68020 __gmpn_addmul_1 -- Multiply a limb vector with a limb and add - the result to a second limb vector. - -Copyright (C) 1992, 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "asm-syntax.h" - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_addmul_1) - -C_SYMBOL_NAME(__gmpn_addmul_1:) -PROLOG(__gmpn_addmul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d5),MEM_PREDEC(sp) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,20),R(res_ptr) - movel MEM_DISP(sp,24),R(s1_ptr) - movel MEM_DISP(sp,28),R(s1_size) - movel MEM_DISP(sp,32),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - clrl R(d5) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - addxl R(d5),R(d1) - addl R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - addxl R(d5),R(d0) - addl R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - addxl R(d5),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d5) - - rts -EPILOG(__gmpn_addmul_1) diff --git a/rts/gmp/mpn/m68k/mc68020/mul_1.S b/rts/gmp/mpn/m68k/mc68020/mul_1.S deleted file mode 100644 index fdd4c39..0000000 --- a/rts/gmp/mpn/m68k/mc68020/mul_1.S +++ /dev/null @@ -1,90 +0,0 @@ -/* mc68020 __gmpn_mul_1 -- Multiply a limb vector with a limb and store - the result in a second limb vector. - -Copyright (C) 1992, 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "asm-syntax.h" - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_mul_1) - -C_SYMBOL_NAME(__gmpn_mul_1:) -PROLOG(__gmpn_mul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d4),MEM_PREDEC(sp) -#if 0 - movel R(d2),MEM_PREDEC(sp) - movel R(d3),MEM_PREDEC(sp) - movel R(d4),MEM_PREDEC(sp) -#endif - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,16),R(res_ptr) - movel MEM_DISP(sp,20),R(s1_ptr) - movel MEM_DISP(sp,24),R(s1_size) - movel MEM_DISP(sp,28),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - movel R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - movel R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - clrl R(d3) - addxl R(d3),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d4) -#if 0 - movel MEM_POSTINC(sp),R(d4) - movel MEM_POSTINC(sp),R(d3) - movel MEM_POSTINC(sp),R(d2) -#endif - rts -EPILOG(__gmpn_mul_1) diff --git a/rts/gmp/mpn/m68k/mc68020/submul_1.S b/rts/gmp/mpn/m68k/mc68020/submul_1.S deleted file mode 100644 index 3c36b70..0000000 --- a/rts/gmp/mpn/m68k/mc68020/submul_1.S +++ /dev/null @@ -1,83 +0,0 @@ -/* mc68020 __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract - the result from a second limb vector. - -Copyright (C) 1992, 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s1_size (sp + 12) - s2_limb (sp + 16) -*/ - -#include "asm-syntax.h" - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_submul_1) - -C_SYMBOL_NAME(__gmpn_submul_1:) -PROLOG(__gmpn_submul_1) - -#define res_ptr a0 -#define s1_ptr a1 -#define s1_size d2 -#define s2_limb d4 - -/* Save used registers on the stack. */ - moveml R(d2)-R(d5),MEM_PREDEC(sp) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,20),R(res_ptr) - movel MEM_DISP(sp,24),R(s1_ptr) - movel MEM_DISP(sp,28),R(s1_size) - movel MEM_DISP(sp,32),R(s2_limb) - - eorw #1,R(s1_size) - clrl R(d1) - clrl R(d5) - lsrl #1,R(s1_size) - bcc L(L1) - subql #1,R(s1_size) - subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ - -L(Loop:) - movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d1):R(d3) - addxl R(d0),R(d3) - addxl R(d5),R(d1) - subl R(d3),MEM_POSTINC(res_ptr) -L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) - mulul R(s2_limb),R(d0):R(d3) - addxl R(d1),R(d3) - addxl R(d5),R(d0) - subl R(d3),MEM_POSTINC(res_ptr) - - dbf R(s1_size),L(Loop) - addxl R(d5),R(d0) - subl #0x10000,R(s1_size) - bcc L(Loop) - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d5) - - rts -EPILOG(__gmpn_submul_1) diff --git a/rts/gmp/mpn/m68k/mc68020/udiv.S b/rts/gmp/mpn/m68k/mc68020/udiv.S deleted file mode 100644 index d00cf13..0000000 --- a/rts/gmp/mpn/m68k/mc68020/udiv.S +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -.text - .even -.globl ___udiv_qrnnd -___udiv_qrnnd: - movel sp@(4),a0 - movel sp@(8),d1 - movel sp@(12),d0 - divul sp@(16),d1:d0 - movel d1,a0@ - rts diff --git a/rts/gmp/mpn/m68k/mc68020/umul.S b/rts/gmp/mpn/m68k/mc68020/umul.S deleted file mode 100644 index a34ae6c..0000000 --- a/rts/gmp/mpn/m68k/mc68020/umul.S +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -.text - .even -.globl ___umul_ppmm -___umul_ppmm: - movel sp@(4),a0 - movel sp@(8),d1 - movel sp@(12),d0 - mulul d0,d0:d1 - movel d1,a0@ - rts diff --git a/rts/gmp/mpn/m68k/rshift.S b/rts/gmp/mpn/m68k/rshift.S deleted file mode 100644 index b47a48e..0000000 --- a/rts/gmp/mpn/m68k/rshift.S +++ /dev/null @@ -1,149 +0,0 @@ -/* mc68020 __gmpn_rshift -- Shift right a low-level natural-number integer. - -Copyright (C) 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s_ptr (sp + 8) - s_size (sp + 16) - cnt (sp + 12) -*/ - -#include "asm-syntax.h" - -#define res_ptr a1 -#define s_ptr a0 -#define s_size d6 -#define cnt d4 - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_rshift) - -C_SYMBOL_NAME(__gmpn_rshift:) -PROLOG(__gmpn_rshift) -/* Save used registers on the stack. */ - moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) - -/* Copy the arguments to registers. */ - movel MEM_DISP(sp,28),R(res_ptr) - movel MEM_DISP(sp,32),R(s_ptr) - movel MEM_DISP(sp,36),R(s_size) - movel MEM_DISP(sp,40),R(cnt) - - moveql #1,R(d5) - cmpl R(d5),R(cnt) - bne L(Lnormal) - cmpl R(res_ptr),R(s_ptr) - bls L(Lspecial) /* jump if res_ptr >= s_ptr */ -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(res_ptr,s_size,l,4),R(a2) -#else /* not mc68020 */ - movel R(s_size),R(d0) - asll #2,R(d0) - lea MEM_INDX(res_ptr,d0,l),R(a2) -#endif - cmpl R(s_ptr),R(a2) - bls L(Lspecial) /* jump if s_ptr >= res_ptr + s_size */ - -L(Lnormal:) - moveql #32,R(d5) - subl R(cnt),R(d5) - movel MEM_POSTINC(s_ptr),R(d2) - movel R(d2),R(d0) - lsll R(d5),R(d0) /* compute carry limb */ - - lsrl R(cnt),R(d2) - movel R(d2),R(d1) - subql #1,R(s_size) - beq L(Lend) - lsrl #1,R(s_size) - bcs L(L1) - subql #1,R(s_size) - -L(Loop:) - movel MEM_POSTINC(s_ptr),R(d2) - movel R(d2),R(d3) - lsll R(d5),R(d3) - orl R(d3),R(d1) - movel R(d1),MEM_POSTINC(res_ptr) - lsrl R(cnt),R(d2) -L(L1:) - movel MEM_POSTINC(s_ptr),R(d1) - movel R(d1),R(d3) - lsll R(d5),R(d3) - orl R(d3),R(d2) - movel R(d2),MEM_POSTINC(res_ptr) - lsrl R(cnt),R(d1) - - dbf R(s_size),L(Loop) - subl #0x10000,R(s_size) - bcc L(Loop) - -L(Lend:) - movel R(d1),MEM(res_ptr) /* store most significant limb */ - -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - rts - -/* We loop from most significant end of the arrays, which is only - permissable if the source and destination don't overlap, since the - function is documented to work for overlapping source and destination. */ - -L(Lspecial:) -#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) - lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) - lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) -#else /* not mc68000 */ - movel R(s_size),R(d0) - asll #2,R(d0) - addl R(s_size),R(s_ptr) - addl R(s_size),R(res_ptr) -#endif - - clrl R(d0) /* initialize carry */ - eorw #1,R(s_size) - lsrl #1,R(s_size) - bcc L(LL1) - subql #1,R(s_size) - -L(LLoop:) - movel MEM_PREDEC(s_ptr),R(d2) - roxrl #1,R(d2) - movel R(d2),MEM_PREDEC(res_ptr) -L(LL1:) - movel MEM_PREDEC(s_ptr),R(d2) - roxrl #1,R(d2) - movel R(d2),MEM_PREDEC(res_ptr) - - dbf R(s_size),L(LLoop) - roxrl #1,R(d0) /* save cy in msb */ - subl #0x10000,R(s_size) - bcs L(LLend) - addl R(d0),R(d0) /* restore cy */ - bra L(LLoop) - -L(LLend:) -/* Restore used registers from stack frame. */ - moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) - rts -EPILOG(__gmpn_rshift) diff --git a/rts/gmp/mpn/m68k/sub_n.S b/rts/gmp/mpn/m68k/sub_n.S deleted file mode 100644 index ce45b24..0000000 --- a/rts/gmp/mpn/m68k/sub_n.S +++ /dev/null @@ -1,79 +0,0 @@ -/* mc68020 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and - store difference in a third limb vector. - -Copyright (C) 1992, 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - INPUT PARAMETERS - res_ptr (sp + 4) - s1_ptr (sp + 8) - s2_ptr (sp + 16) - size (sp + 12) -*/ - -#include "asm-syntax.h" - - TEXT - ALIGN - GLOBL C_SYMBOL_NAME(__gmpn_sub_n) - -C_SYMBOL_NAME(__gmpn_sub_n:) -PROLOG(__gmpn_sub_n) -/* Save used registers on the stack. */ - movel R(d2),MEM_PREDEC(sp) - movel R(a2),MEM_PREDEC(sp) - -/* Copy the arguments to registers. Better use movem? */ - movel MEM_DISP(sp,12),R(a2) - movel MEM_DISP(sp,16),R(a0) - movel MEM_DISP(sp,20),R(a1) - movel MEM_DISP(sp,24),R(d2) - - eorw #1,R(d2) - lsrl #1,R(d2) - bcc L(L1) - subql #1,R(d2) /* clears cy as side effect */ - -L(Loop:) - movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - subxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) -L(L1:) movel MEM_POSTINC(a0),R(d0) - movel MEM_POSTINC(a1),R(d1) - subxl R(d1),R(d0) - movel R(d0),MEM_POSTINC(a2) - - dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ - subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ - subl #0x10000,R(d2) - bcs L(L2) - addl R(d0),R(d0) /* restore cy */ - bra L(Loop) - -L(L2:) - negl R(d0) - -/* Restore used registers from stack frame. */ - movel MEM_POSTINC(sp),R(a2) - movel MEM_POSTINC(sp),R(d2) - - rts -EPILOG(__gmpn_sub_n) diff --git a/rts/gmp/mpn/m68k/syntax.h b/rts/gmp/mpn/m68k/syntax.h deleted file mode 100644 index 9eec279..0000000 --- a/rts/gmp/mpn/m68k/syntax.h +++ /dev/null @@ -1,177 +0,0 @@ -/* asm.h -- Definitions for 68k syntax variations. - -Copyright (C) 1992, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#undef ALIGN - -#ifdef MIT_SYNTAX -#define PROLOG(name) -#define EPILOG(name) -#define R(r)r -#define MEM(base)base@ -#define MEM_DISP(base,displacement)base@(displacement) -#define MEM_INDX(base,idx,size_suffix)base@(idx:size_suffix) -#define MEM_INDX1(base,idx,size_suffix,scale)base@(idx:size_suffix:scale) -#define MEM_PREDEC(memory_base)memory_base@- -#define MEM_POSTINC(memory_base)memory_base@+ -#define L(label) label -#define TEXT .text -#define ALIGN .even -#define GLOBL .globl -#define moveql moveq -/* Use variable sized opcodes. */ -#define bcc jcc -#define bcs jcs -#define bls jls -#define beq jeq -#define bne jne -#define bra jra -#endif - -#ifdef SONY_SYNTAX -#define PROLOG(name) -#define EPILOG(name) -#define R(r)r -#define MEM(base)(base) -#define MEM_DISP(base,displacement)(displacement,base) -#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix) -#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale) -#define MEM_PREDEC(memory_base)-(memory_base) -#define MEM_POSTINC(memory_base)(memory_base)+ -#define L(label) label -#define TEXT .text -#define ALIGN .even -#define GLOBL .globl -#endif - -#ifdef MOTOROLA_SYNTAX -#define PROLOG(name) -#define EPILOG(name) -#define R(r)r -#define MEM(base)(base) -#define MEM_DISP(base,displacement)(displacement,base) -#define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix) -#define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale) -#define MEM_PREDEC(memory_base)-(memory_base) -#define MEM_POSTINC(memory_base)(memory_base)+ -#define L(label) label -#define TEXT -#define ALIGN -#define GLOBL XDEF -#define lea LEA -#define movel MOVE.L -#define moveml MOVEM.L -#define moveql MOVEQ.L -#define cmpl CMP.L -#define orl OR.L -#define clrl CLR.L -#define eorw EOR.W -#define lsrl LSR.L -#define lsll LSL.L -#define roxrl ROXR.L -#define roxll ROXL.L -#define addl ADD.L -#define addxl ADDX.L -#define addql ADDQ.L -#define subl SUB.L -#define subxl SUBX.L -#define subql SUBQ.L -#define negl NEG.L -#define mulul MULU.L -#define bcc BCC -#define bcs BCS -#define bls BLS -#define beq BEQ -#define bne BNE -#define bra BRA -#define dbf DBF -#define rts RTS -#define d0 D0 -#define d1 D1 -#define d2 D2 -#define d3 D3 -#define d4 D4 -#define d5 D5 -#define d6 D6 -#define d7 D7 -#define a0 A0 -#define a1 A1 -#define a2 A2 -#define a3 A3 -#define a4 A4 -#define a5 A5 -#define a6 A6 -#define a7 A7 -#define sp SP -#endif - -#ifdef ELF_SYNTAX -#define PROLOG(name) .type name,@function -#define EPILOG(name) .size name,.-name -#define MEM(base)(R(base)) -#define MEM_DISP(base,displacement)(displacement,R(base)) -#define MEM_PREDEC(memory_base)-(R(memory_base)) -#define MEM_POSTINC(memory_base)(R(memory_base))+ -#ifdef __STDC__ -#define R_(r)%##r -#define R(r)R_(r) -#define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix)) -#define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix) -#define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale)) -#define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale) -#define L(label) .##label -#else -#define R(r)%/**/r -#define MEM_INDX(base,idx,size_suffix)(R(base),R(idx).size_suffix) -#define MEM_INDX1(base,idx,size_suffix,scale)(R(base),R(idx).size_suffix*scale) -#define L(label) ./**/label -#endif -#define TEXT .text -#define ALIGN .align 2 -#define GLOBL .globl -#define bcc jbcc -#define bcs jbcs -#define bls jbls -#define beq jbeq -#define bne jbne -#define bra jbra -#endif - -#if defined (SONY_SYNTAX) || defined (ELF_SYNTAX) -#define movel move.l -#define moveml movem.l -#define moveql moveq.l -#define cmpl cmp.l -#define orl or.l -#define clrl clr.l -#define eorw eor.w -#define lsrl lsr.l -#define lsll lsl.l -#define roxrl roxr.l -#define roxll roxl.l -#define addl add.l -#define addxl addx.l -#define addql addq.l -#define subl sub.l -#define subxl subx.l -#define subql subq.l -#define negl neg.l -#define mulul mulu.l -#endif diff --git a/rts/gmp/mpn/m88k/add_n.s b/rts/gmp/mpn/m88k/add_n.s deleted file mode 100644 index 0b776c6..0000000 --- a/rts/gmp/mpn/m88k/add_n.s +++ /dev/null @@ -1,104 +0,0 @@ -; mc88100 __gmpn_add -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/mc88110/add_n.S b/rts/gmp/mpn/m88k/mc88110/add_n.S deleted file mode 100644 index 843a50d..0000000 --- a/rts/gmp/mpn/m88k/mc88110/add_n.S +++ /dev/null @@ -1,200 +0,0 @@ -; mc88110 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -; sum in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/mc88110/addmul_1.s b/rts/gmp/mpn/m88k/mc88110/addmul_1.s deleted file mode 100644 index 7d97c87..0000000 --- a/rts/gmp/mpn/m88k/mc88110/addmul_1.s +++ /dev/null @@ -1,61 +0,0 @@ -; mc88110 __gmpn_addmul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/mc88110/mul_1.s b/rts/gmp/mpn/m88k/mc88110/mul_1.s deleted file mode 100644 index b8483af..0000000 --- a/rts/gmp/mpn/m88k/mc88110/mul_1.s +++ /dev/null @@ -1,59 +0,0 @@ -; mc88110 __gmpn_mul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/mc88110/sub_n.S b/rts/gmp/mpn/m88k/mc88110/sub_n.S deleted file mode 100644 index 715a3fa..0000000 --- a/rts/gmp/mpn/m88k/mc88110/sub_n.S +++ /dev/null @@ -1,276 +0,0 @@ -; mc88110 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/mul_1.s b/rts/gmp/mpn/m88k/mul_1.s deleted file mode 100644 index 0637083..0000000 --- a/rts/gmp/mpn/m88k/mul_1.s +++ /dev/null @@ -1,127 +0,0 @@ -; mc88100 __gmpn_mul_1 -- Multiply a limb vector with a single limb and -; store the product in a second limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/m88k/sub_n.s b/rts/gmp/mpn/m88k/sub_n.s deleted file mode 100644 index 2fd345a..0000000 --- a/rts/gmp/mpn/m88k/sub_n.s +++ /dev/null @@ -1,106 +0,0 @@ -; mc88100 __gmpn_sub -- Subtract two limb vectors of the same length > 0 and -; store difference in a third limb vector. - -; Copyright (C) 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; 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/rts/gmp/mpn/mips2/add_n.s b/rts/gmp/mpn/mips2/add_n.s deleted file mode 100644 index 5c3c7fc..0000000 --- a/rts/gmp/mpn/mips2/add_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # MIPS2 __gmpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # s2_ptr $6 - # size $7 - - .text - .align 2 - .globl __gmpn_add_n - .ent __gmpn_add_n -__gmpn_add_n: - .set noreorder - .set nomacro - - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,.L0 # 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 - - .end __gmpn_add_n diff --git a/rts/gmp/mpn/mips2/addmul_1.s b/rts/gmp/mpn/mips2/addmul_1.s deleted file mode 100644 index 1e50377..0000000 --- a/rts/gmp/mpn/mips2/addmul_1.s +++ /dev/null @@ -1,97 +0,0 @@ - # MIPS __gmpn_addmul_1 -- Multiply a limb vector with a single limb and - # add the product to a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_addmul_1 - .ent __gmpn_addmul_1 -__gmpn_addmul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - lw $8,0($5) - - # warm up phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) # 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 # add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) # load new s1 limb as early as possible - addiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_addmul_1 diff --git a/rts/gmp/mpn/mips2/lshift.s b/rts/gmp/mpn/mips2/lshift.s deleted file mode 100644 index 2ca3a3c..0000000 --- a/rts/gmp/mpn/mips2/lshift.s +++ /dev/null @@ -1,95 +0,0 @@ - # MIPS2 __gmpn_lshift -- - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # src_ptr $5 - # size $6 - # cnt $7 - - .text - .align 2 - .globl __gmpn_lshift - .ent __gmpn_lshift -__gmpn_lshift: - .set noreorder - .set nomacro - - sll $2,$6,2 - addu $5,$5,$2 # make r5 point at end of src - lw $10,-4($5) # load first limb - subu $13,$0,$7 - addu $4,$4,$2 # make r4 point at end of res - addiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop - srl $2,$10,$13 # 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) - .end __gmpn_lshift diff --git a/rts/gmp/mpn/mips2/mul_1.s b/rts/gmp/mpn/mips2/mul_1.s deleted file mode 100644 index ea8aa26..0000000 --- a/rts/gmp/mpn/mips2/mul_1.s +++ /dev/null @@ -1,85 +0,0 @@ - # MIPS __gmpn_mul_1 -- Multiply a limb vector with a single limb and - # store the product in a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_mul_1 - .ent __gmpn_mul_1 -__gmpn_mul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - lw $8,0($5) - - # warm up phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) # load new s1 limb as early as possible - -Loop: mflo $10 - mfhi $9 - addiu $5,$5,4 - addu $10,$10,$2 # add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) # load new s1 limb as early as possible - addiu $6,$6,-1 # decrement loop counter - sltu $2,$10,$2 # carry from previous addition -> $2 - sw $10,0($4) - addiu $4,$4,4 - bne $6,$0,Loop - addu $2,$9,$2 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_mul_1 diff --git a/rts/gmp/mpn/mips2/rshift.s b/rts/gmp/mpn/mips2/rshift.s deleted file mode 100644 index 37c8f39..0000000 --- a/rts/gmp/mpn/mips2/rshift.s +++ /dev/null @@ -1,92 +0,0 @@ - # MIPS2 __gmpn_rshift -- - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # src_ptr $5 - # size $6 - # cnt $7 - - .text - .align 2 - .globl __gmpn_rshift - .ent __gmpn_rshift -__gmpn_rshift: - .set noreorder - .set nomacro - - lw $10,0($5) # load first limb - subu $13,$0,$7 - addiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop - sll $2,$10,$13 # 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) - .end __gmpn_rshift diff --git a/rts/gmp/mpn/mips2/sub_n.s b/rts/gmp/mpn/mips2/sub_n.s deleted file mode 100644 index 51d34f3..0000000 --- a/rts/gmp/mpn/mips2/sub_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # MIPS2 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # s2_ptr $6 - # size $7 - - .text - .align 2 - .globl __gmpn_sub_n - .ent __gmpn_sub_n -__gmpn_sub_n: - .set noreorder - .set nomacro - - lw $10,0($5) - lw $11,0($6) - - addiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,.L0 # 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 - - .end __gmpn_sub_n diff --git a/rts/gmp/mpn/mips2/submul_1.s b/rts/gmp/mpn/mips2/submul_1.s deleted file mode 100644 index 495dea3..0000000 --- a/rts/gmp/mpn/mips2/submul_1.s +++ /dev/null @@ -1,97 +0,0 @@ - # MIPS __gmpn_submul_1 -- Multiply a limb vector with a single limb and - # subtract the product from a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_submul_1 - .ent __gmpn_submul_1 -__gmpn_submul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - lw $8,0($5) - - # warm up phase 1 - addiu $5,$5,4 - multu $8,$7 - - addiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - addiu $6,$6,-1 - beq $6,$0,$LC1 - lw $8,0($5) # 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 # add old carry limb to low product limb - multu $8,$7 - lw $8,0($5) # load new s1 limb as early as possible - addiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_submul_1 diff --git a/rts/gmp/mpn/mips2/umul.s b/rts/gmp/mpn/mips2/umul.s deleted file mode 100644 index 40e8476..0000000 --- a/rts/gmp/mpn/mips2/umul.s +++ /dev/null @@ -1,30 +0,0 @@ - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - .text - .align 2 - .globl __umul_ppmm - .ent __umul_ppmm -__umul_ppmm: - multu $5,$6 - mflo $3 - mfhi $2 - sw $3,0($4) - j $31 - .end __umul_ppmm diff --git a/rts/gmp/mpn/mips3/README b/rts/gmp/mpn/mips3/README deleted file mode 100644 index e94b2c7..0000000 --- a/rts/gmp/mpn/mips3/README +++ /dev/null @@ -1,23 +0,0 @@ -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 noticable 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. - -STATUS - -Good... diff --git a/rts/gmp/mpn/mips3/add_n.s b/rts/gmp/mpn/mips3/add_n.s deleted file mode 100644 index adad0be..0000000 --- a/rts/gmp/mpn/mips3/add_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # MIPS3 __gmpn_add_n -- Add two limb vectors of the same length > 0 and - # store sum in a third limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # s2_ptr $6 - # size $7 - - .text - .align 2 - .globl __gmpn_add_n - .ent __gmpn_add_n -__gmpn_add_n: - .set noreorder - .set nomacro - - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,.L0 # 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,$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 - - ld $10,16($5) - daddu $13,$13,$2 - ld $11,16($6) - sltu $8,$13,$2 - daddu $13,$12,$13 - sltu $2,$13,$12 - sd $13,8($4) - or $2,$2,$8 - - ld $12,24($5) - daddu $11,$11,$2 - ld $13,24($6) - sltu $8,$11,$2 - daddu $11,$10,$11 - sltu $2,$11,$10 - sd $11,16($4) - or $2,$2,$8 - - ld $10,32($5) - daddu $13,$13,$2 - ld $11,32($6) - sltu $8,$13,$2 - daddu $13,$12,$13 - sltu $2,$13,$12 - 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 - - .end __gmpn_add_n diff --git a/rts/gmp/mpn/mips3/addmul_1.s b/rts/gmp/mpn/mips3/addmul_1.s deleted file mode 100644 index d390e22..0000000 --- a/rts/gmp/mpn/mips3/addmul_1.s +++ /dev/null @@ -1,97 +0,0 @@ - # MIPS3 __gmpn_addmul_1 -- Multiply a limb vector with a single limb and - # add the product to a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_addmul_1 - .ent __gmpn_addmul_1 -__gmpn_addmul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) # 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 # add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_addmul_1 diff --git a/rts/gmp/mpn/mips3/gmp-mparam.h b/rts/gmp/mpn/mips3/gmp-mparam.h deleted file mode 100644 index 656e90c..0000000 --- a/rts/gmp/mpn/mips3/gmp-mparam.h +++ /dev/null @@ -1,58 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values are for the R10000 usign the system cc. */ -/* Generated by tuneup.c, 2000-07-25. */ -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 16 -#endif -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 32 -#endif - -/* Supressed the TOOM3 values as they looked absolutely crazy - (698 and 21 respectively) */ - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 58 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 54 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 82 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 159 -#endif diff --git a/rts/gmp/mpn/mips3/lshift.s b/rts/gmp/mpn/mips3/lshift.s deleted file mode 100644 index 372606f..0000000 --- a/rts/gmp/mpn/mips3/lshift.s +++ /dev/null @@ -1,95 +0,0 @@ - # MIPS3 __gmpn_lshift -- - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # src_ptr $5 - # size $6 - # cnt $7 - - .text - .align 2 - .globl __gmpn_lshift - .ent __gmpn_lshift -__gmpn_lshift: - .set noreorder - .set nomacro - - dsll $2,$6,3 - daddu $5,$5,$2 # make r5 point at end of src - ld $10,-8($5) # load first limb - dsubu $13,$0,$7 - daddu $4,$4,$2 # make r4 point at end of res - daddiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop - dsrl $2,$10,$13 # 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) - .end __gmpn_lshift diff --git a/rts/gmp/mpn/mips3/mul_1.s b/rts/gmp/mpn/mips3/mul_1.s deleted file mode 100644 index 6659e2b..0000000 --- a/rts/gmp/mpn/mips3/mul_1.s +++ /dev/null @@ -1,85 +0,0 @@ - # MIPS3 __gmpn_mul_1 -- Multiply a limb vector with a single limb and - # store the product in a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_mul_1 - .ent __gmpn_mul_1 -__gmpn_mul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) # load new s1 limb as early as possible - -Loop: mflo $10 - mfhi $9 - daddiu $5,$5,8 - daddu $10,$10,$2 # add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$10,$2 # carry from previous addition -> $2 - sd $10,0($4) - daddiu $4,$4,8 - bne $6,$0,Loop - daddu $2,$9,$2 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_mul_1 diff --git a/rts/gmp/mpn/mips3/rshift.s b/rts/gmp/mpn/mips3/rshift.s deleted file mode 100644 index 59c7fd3..0000000 --- a/rts/gmp/mpn/mips3/rshift.s +++ /dev/null @@ -1,92 +0,0 @@ - # MIPS3 __gmpn_rshift -- - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # src_ptr $5 - # size $6 - # cnt $7 - - .text - .align 2 - .globl __gmpn_rshift - .ent __gmpn_rshift -__gmpn_rshift: - .set noreorder - .set nomacro - - ld $10,0($5) # load first limb - dsubu $13,$0,$7 - daddiu $6,$6,-1 - and $9,$6,4-1 # number of limbs in first loop - beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop - dsll $2,$10,$13 # 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) - .end __gmpn_rshift diff --git a/rts/gmp/mpn/mips3/sub_n.s b/rts/gmp/mpn/mips3/sub_n.s deleted file mode 100644 index c57c824..0000000 --- a/rts/gmp/mpn/mips3/sub_n.s +++ /dev/null @@ -1,120 +0,0 @@ - # MIPS3 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and - # store difference in a third limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # s2_ptr $6 - # size $7 - - .text - .align 2 - .globl __gmpn_sub_n - .ent __gmpn_sub_n -__gmpn_sub_n: - .set noreorder - .set nomacro - - ld $10,0($5) - ld $11,0($6) - - daddiu $7,$7,-1 - and $9,$7,4-1 # number of limbs in first loop - beq $9,$0,.L0 # 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) - 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 - - ld $10,16($5) - daddu $13,$13,$2 - ld $11,16($6) - sltu $8,$13,$2 - dsubu $13,$12,$13 - sltu $2,$12,$13 - sd $13,8($4) - or $2,$2,$8 - - ld $12,24($5) - daddu $11,$11,$2 - ld $13,24($6) - sltu $8,$11,$2 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,16($4) - or $2,$2,$8 - - ld $10,32($5) - daddu $13,$13,$2 - ld $11,32($6) - sltu $8,$13,$2 - dsubu $13,$12,$13 - sltu $2,$12,$13 - 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 - dsubu $11,$10,$11 - sltu $2,$10,$11 - sd $11,0($4) - j $31 - or $2,$2,$8 - - .end __gmpn_sub_n diff --git a/rts/gmp/mpn/mips3/submul_1.s b/rts/gmp/mpn/mips3/submul_1.s deleted file mode 100644 index 531f970..0000000 --- a/rts/gmp/mpn/mips3/submul_1.s +++ /dev/null @@ -1,97 +0,0 @@ - # MIPS3 __gmpn_submul_1 -- Multiply a limb vector with a single limb and - # subtract the product from a second limb vector. - - # Copyright (C) 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 the GNU Lesser General Public License as published by - # the Free Software Foundation; either version 2.1 of the License, or (at your - # option) any later version. - - # The GNU MP Library is distributed in the hope that it will be useful, but - # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - # License for more details. - - # You should have received a copy of the GNU Lesser General Public License - # along with the GNU MP Library; see the file COPYING.LIB. If not, write to - # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, - # MA 02111-1307, USA. - - - # INPUT PARAMETERS - # res_ptr $4 - # s1_ptr $5 - # size $6 - # s2_limb $7 - - .text - .align 4 - .globl __gmpn_submul_1 - .ent __gmpn_submul_1 -__gmpn_submul_1: - .set noreorder - .set nomacro - - # warm up phase 0 - ld $8,0($5) - - # warm up phase 1 - daddiu $5,$5,8 - dmultu $8,$7 - - daddiu $6,$6,-1 - beq $6,$0,$LC0 - move $2,$0 # zero cy2 - - daddiu $6,$6,-1 - beq $6,$0,$LC1 - ld $8,0($5) # 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 # add old carry limb to low product limb - dmultu $8,$7 - ld $8,0($5) # load new s1 limb as early as possible - daddiu $6,$6,-1 # decrement loop counter - sltu $2,$3,$2 # 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - # cool 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 # add high product limb and carry from addition - - .end __gmpn_submul_1 diff --git a/rts/gmp/mpn/mp_bases.c b/rts/gmp/mpn/mp_bases.c deleted file mode 100644 index 011c328..0000000 --- a/rts/gmp/mpn/mp_bases.c +++ /dev/null @@ -1,550 +0,0 @@ -/* __mp_bases -- Structure for conversion between internal binary - format and strings in base 2..255. The fields are explained in - gmp-impl.h. - - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#if BITS_PER_MP_LIMB == 32 -const struct bases __mp_bases[256] = -{ - /* 0 */ {0, 0.0, 0, 0}, - /* 1 */ {0, 1e38, 0, 0}, - /* 2 */ {32, 1.0000000000000000, 0x1, 0x0}, - /* 3 */ {20, 0.6309297535714575, 0xcfd41b91, 0x3b563c24}, - /* 4 */ {16, 0.5000000000000000, 0x2, 0x0}, - /* 5 */ {13, 0.4306765580733931, 0x48c27395, 0xc25c2684}, - /* 6 */ {12, 0.3868528072345416, 0x81bf1000, 0xf91bd1b6}, - /* 7 */ {11, 0.3562071871080222, 0x75db9c97, 0x1607a2cb}, - /* 8 */ {10, 0.3333333333333334, 0x3, 0x0}, - /* 9 */ {10, 0.3154648767857287, 0xcfd41b91, 0x3b563c24}, - /* 10 */ {9, 0.3010299956639811, 0x3b9aca00, 0x12e0be82}, - /* 11 */ {9, 0.2890648263178878, 0x8c8b6d2b, 0xd24cde04}, - /* 12 */ {8, 0.2789429456511298, 0x19a10000, 0x3fa39ab5}, - /* 13 */ {8, 0.2702381544273197, 0x309f1021, 0x50f8ac5f}, - /* 14 */ {8, 0.2626495350371936, 0x57f6c100, 0x74843b1e}, - /* 15 */ {8, 0.2559580248098155, 0x98c29b81, 0xad0326c2}, - /* 16 */ {8, 0.2500000000000000, 0x4, 0x0}, - /* 17 */ {7, 0.2446505421182260, 0x18754571, 0x4ef0b6bd}, - /* 18 */ {7, 0.2398124665681315, 0x247dbc80, 0xc0fc48a1}, - /* 19 */ {7, 0.2354089133666382, 0x3547667b, 0x33838942}, - /* 20 */ {7, 0.2313782131597592, 0x4c4b4000, 0xad7f29ab}, - /* 21 */ {7, 0.2276702486969530, 0x6b5a6e1d, 0x313c3d15}, - /* 22 */ {7, 0.2242438242175754, 0x94ace180, 0xb8cca9e0}, - /* 23 */ {7, 0.2210647294575037, 0xcaf18367, 0x42ed6de9}, - /* 24 */ {6, 0.2181042919855316, 0xb640000, 0x67980e0b}, - /* 25 */ {6, 0.2153382790366965, 0xe8d4a51, 0x19799812}, - /* 26 */ {6, 0.2127460535533632, 0x1269ae40, 0xbce85396}, - /* 27 */ {6, 0.2103099178571525, 0x17179149, 0x62c103a9}, - /* 28 */ {6, 0.2080145976765095, 0x1cb91000, 0x1d353d43}, - /* 29 */ {6, 0.2058468324604344, 0x23744899, 0xce1decea}, - /* 30 */ {6, 0.2037950470905062, 0x2b73a840, 0x790fc511}, - /* 31 */ {6, 0.2018490865820999, 0x34e63b41, 0x35b865a0}, - /* 32 */ {6, 0.2000000000000000, 0x5, 0x0}, - /* 33 */ {6, 0.1982398631705605, 0x4cfa3cc1, 0xa9aed1b3}, - /* 34 */ {6, 0.1965616322328226, 0x5c13d840, 0x63dfc229}, - /* 35 */ {6, 0.1949590218937863, 0x6d91b519, 0x2b0fee30}, - /* 36 */ {6, 0.1934264036172708, 0x81bf1000, 0xf91bd1b6}, - /* 37 */ {6, 0.1919587200065601, 0x98ede0c9, 0xac89c3a9}, - /* 38 */ {6, 0.1905514124267734, 0xb3773e40, 0x6d2c32fe}, - /* 39 */ {6, 0.1892003595168700, 0xd1bbc4d1, 0x387907c9}, - /* 40 */ {6, 0.1879018247091076, 0xf4240000, 0xc6f7a0b}, - /* 41 */ {5, 0.1866524112389434, 0x6e7d349, 0x28928154}, - /* 42 */ {5, 0.1854490234153689, 0x7ca30a0, 0x6e8629d}, - /* 43 */ {5, 0.1842888331487062, 0x8c32bbb, 0xd373dca0}, - /* 44 */ {5, 0.1831692509136336, 0x9d46c00, 0xa0b17895}, - /* 45 */ {5, 0.1820879004699383, 0xaffacfd, 0x746811a5}, - /* 46 */ {5, 0.1810425967800402, 0xc46bee0, 0x4da6500f}, - /* 47 */ {5, 0.1800313266566926, 0xdab86ef, 0x2ba23582}, - /* 48 */ {5, 0.1790522317510414, 0xf300000, 0xdb20a88}, - /* 49 */ {5, 0.1781035935540111, 0x10d63af1, 0xe68d5ce4}, - /* 50 */ {5, 0.1771838201355579, 0x12a05f20, 0xb7cdfd9d}, - /* 51 */ {5, 0.1762914343888821, 0x1490aae3, 0x8e583933}, - /* 52 */ {5, 0.1754250635819545, 0x16a97400, 0x697cc3ea}, - /* 53 */ {5, 0.1745834300480449, 0x18ed2825, 0x48a5ca6c}, - /* 54 */ {5, 0.1737653428714400, 0x1b5e4d60, 0x2b52db16}, - /* 55 */ {5, 0.1729696904450771, 0x1dff8297, 0x111586a6}, - /* 56 */ {5, 0.1721954337940981, 0x20d38000, 0xf31d2b36}, - /* 57 */ {5, 0.1714416005739134, 0x23dd1799, 0xc8d76d19}, - /* 58 */ {5, 0.1707072796637201, 0x271f35a0, 0xa2cb1eb4}, - /* 59 */ {5, 0.1699916162869140, 0x2a9ce10b, 0x807c3ec3}, - /* 60 */ {5, 0.1692938075987814, 0x2e593c00, 0x617ec8bf}, - /* 61 */ {5, 0.1686130986895011, 0x3257844d, 0x45746cbe}, - /* 62 */ {5, 0.1679487789570419, 0x369b13e0, 0x2c0aa273}, - /* 63 */ {5, 0.1673001788101741, 0x3b27613f, 0x14f90805}, - /* 64 */ {5, 0.1666666666666667, 0x6, 0x0}, - /* 65 */ {5, 0.1660476462159378, 0x4528a141, 0xd9cf0829}, - /* 66 */ {5, 0.1654425539190583, 0x4aa51420, 0xb6fc4841}, - /* 67 */ {5, 0.1648508567221604, 0x50794633, 0x973054cb}, - /* 68 */ {5, 0.1642720499620502, 0x56a94400, 0x7a1dbe4b}, - /* 69 */ {5, 0.1637056554452156, 0x5d393975, 0x5f7fcd7f}, - /* 70 */ {5, 0.1631512196835108, 0x642d7260, 0x47196c84}, - /* 71 */ {5, 0.1626083122716341, 0x6b8a5ae7, 0x30b43635}, - /* 72 */ {5, 0.1620765243931223, 0x73548000, 0x1c1fa5f6}, - /* 73 */ {5, 0.1615554674429964, 0x7b908fe9, 0x930634a}, - /* 74 */ {5, 0.1610447717564445, 0x84435aa0, 0xef7f4a3c}, - /* 75 */ {5, 0.1605440854340214, 0x8d71d25b, 0xcf5552d2}, - /* 76 */ {5, 0.1600530732548213, 0x97210c00, 0xb1a47c8e}, - /* 77 */ {5, 0.1595714156699382, 0xa1563f9d, 0x9634b43e}, - /* 78 */ {5, 0.1590988078692941, 0xac16c8e0, 0x7cd3817d}, - /* 79 */ {5, 0.1586349589155960, 0xb768278f, 0x65536761}, - /* 80 */ {5, 0.1581795909397823, 0xc3500000, 0x4f8b588e}, - /* 81 */ {5, 0.1577324383928644, 0xcfd41b91, 0x3b563c24}, - /* 82 */ {5, 0.1572932473495469, 0xdcfa6920, 0x28928154}, - /* 83 */ {5, 0.1568617748594410, 0xeac8fd83, 0x1721bfb0}, - /* 84 */ {5, 0.1564377883420716, 0xf9461400, 0x6e8629d}, - /* 85 */ {4, 0.1560210650222250, 0x31c84b1, 0x491cc17c}, - /* 86 */ {4, 0.1556113914024940, 0x342ab10, 0x3a11d83b}, - /* 87 */ {4, 0.1552085627701551, 0x36a2c21, 0x2be074cd}, - /* 88 */ {4, 0.1548123827357682, 0x3931000, 0x1e7a02e7}, - /* 89 */ {4, 0.1544226628011101, 0x3bd5ee1, 0x11d10edd}, - /* 90 */ {4, 0.1540392219542636, 0x3e92110, 0x5d92c68}, - /* 91 */ {4, 0.1536618862898642, 0x4165ef1, 0xf50dbfb2}, - /* 92 */ {4, 0.1532904886526781, 0x4452100, 0xdf9f1316}, - /* 93 */ {4, 0.1529248683028321, 0x4756fd1, 0xcb52a684}, - /* 94 */ {4, 0.1525648706011593, 0x4a75410, 0xb8163e97}, - /* 95 */ {4, 0.1522103467132434, 0x4dad681, 0xa5d8f269}, - /* 96 */ {4, 0.1518611533308632, 0x5100000, 0x948b0fcd}, - /* 97 */ {4, 0.1515171524096389, 0x546d981, 0x841e0215}, - /* 98 */ {4, 0.1511782109217764, 0x57f6c10, 0x74843b1e}, - /* 99 */ {4, 0.1508442006228941, 0x5b9c0d1, 0x65b11e6e}, - /* 100 */ {4, 0.1505149978319906, 0x5f5e100, 0x5798ee23}, - /* 101 */ {4, 0.1501904832236879, 0x633d5f1, 0x4a30b99b}, - /* 102 */ {4, 0.1498705416319474, 0x673a910, 0x3d6e4d94}, - /* 103 */ {4, 0.1495550618645152, 0x6b563e1, 0x314825b0}, - /* 104 */ {4, 0.1492439365274121, 0x6f91000, 0x25b55f2e}, - /* 105 */ {4, 0.1489370618588283, 0x73eb721, 0x1aadaccb}, - /* 106 */ {4, 0.1486343375718350, 0x7866310, 0x10294ba2}, - /* 107 */ {4, 0.1483356667053617, 0x7d01db1, 0x620f8f6}, - /* 108 */ {4, 0.1480409554829326, 0x81bf100, 0xf91bd1b6}, - /* 109 */ {4, 0.1477501131786861, 0x869e711, 0xe6d37b2a}, - /* 110 */ {4, 0.1474630519902391, 0x8ba0a10, 0xd55cff6e}, - /* 111 */ {4, 0.1471796869179852, 0x90c6441, 0xc4ad2db2}, - /* 112 */ {4, 0.1468999356504447, 0x9610000, 0xb4b985cf}, - /* 113 */ {4, 0.1466237184553111, 0x9b7e7c1, 0xa5782bef}, - /* 114 */ {4, 0.1463509580758620, 0xa112610, 0x96dfdd2a}, - /* 115 */ {4, 0.1460815796324244, 0xa6cc591, 0x88e7e509}, - /* 116 */ {4, 0.1458155105286054, 0xacad100, 0x7b8813d3}, - /* 117 */ {4, 0.1455526803620167, 0xb2b5331, 0x6eb8b595}, - /* 118 */ {4, 0.1452930208392428, 0xb8e5710, 0x627289db}, - /* 119 */ {4, 0.1450364656948130, 0xbf3e7a1, 0x56aebc07}, - /* 120 */ {4, 0.1447829506139581, 0xc5c1000, 0x4b66dc33}, - /* 121 */ {4, 0.1445324131589439, 0xcc6db61, 0x4094d8a3}, - /* 122 */ {4, 0.1442847926987864, 0xd345510, 0x3632f7a5}, - /* 123 */ {4, 0.1440400303421672, 0xda48871, 0x2c3bd1f0}, - /* 124 */ {4, 0.1437980688733775, 0xe178100, 0x22aa4d5f}, - /* 125 */ {4, 0.1435588526911310, 0xe8d4a51, 0x19799812}, - /* 126 */ {4, 0.1433223277500932, 0xf05f010, 0x10a523e5}, - /* 127 */ {4, 0.1430884415049874, 0xf817e01, 0x828a237}, - /* 128 */ {4, 0.1428571428571428, 0x7, 0x0}, - /* 129 */ {4, 0.1426283821033600, 0x10818201, 0xf04ec452}, - /* 130 */ {4, 0.1424021108869747, 0x11061010, 0xe136444a}, - /* 131 */ {4, 0.1421782821510107, 0x118db651, 0xd2af9589}, - /* 132 */ {4, 0.1419568500933153, 0x12188100, 0xc4b42a83}, - /* 133 */ {4, 0.1417377701235801, 0x12a67c71, 0xb73dccf5}, - /* 134 */ {4, 0.1415209988221527, 0x1337b510, 0xaa4698c5}, - /* 135 */ {4, 0.1413064939005528, 0x13cc3761, 0x9dc8f729}, - /* 136 */ {4, 0.1410942141636095, 0x14641000, 0x91bf9a30}, - /* 137 */ {4, 0.1408841194731412, 0x14ff4ba1, 0x86257887}, - /* 138 */ {4, 0.1406761707131039, 0x159df710, 0x7af5c98c}, - /* 139 */ {4, 0.1404703297561400, 0x16401f31, 0x702c01a0}, - /* 140 */ {4, 0.1402665594314587, 0x16e5d100, 0x65c3ceb1}, - /* 141 */ {4, 0.1400648234939879, 0x178f1991, 0x5bb91502}, - /* 142 */ {4, 0.1398650865947379, 0x183c0610, 0x5207ec23}, - /* 143 */ {4, 0.1396673142523192, 0x18eca3c1, 0x48ac9c19}, - /* 144 */ {4, 0.1394714728255649, 0x19a10000, 0x3fa39ab5}, - /* 145 */ {4, 0.1392775294872041, 0x1a592841, 0x36e98912}, - /* 146 */ {4, 0.1390854521985406, 0x1b152a10, 0x2e7b3140}, - /* 147 */ {4, 0.1388952096850913, 0x1bd51311, 0x2655840b}, - /* 148 */ {4, 0.1387067714131417, 0x1c98f100, 0x1e7596ea}, - /* 149 */ {4, 0.1385201075671774, 0x1d60d1b1, 0x16d8a20d}, - /* 150 */ {4, 0.1383351890281539, 0x1e2cc310, 0xf7bfe87}, - /* 151 */ {4, 0.1381519873525671, 0x1efcd321, 0x85d2492}, - /* 152 */ {4, 0.1379704747522905, 0x1fd11000, 0x179a9f4}, - /* 153 */ {4, 0.1377906240751463, 0x20a987e1, 0xf59e80eb}, - /* 154 */ {4, 0.1376124087861776, 0x21864910, 0xe8b768db}, - /* 155 */ {4, 0.1374358029495937, 0x226761f1, 0xdc39d6d5}, - /* 156 */ {4, 0.1372607812113589, 0x234ce100, 0xd021c5d1}, - /* 157 */ {4, 0.1370873187823978, 0x2436d4d1, 0xc46b5e37}, - /* 158 */ {4, 0.1369153914223921, 0x25254c10, 0xb912f39c}, - /* 159 */ {4, 0.1367449754241439, 0x26185581, 0xae150294}, - /* 160 */ {4, 0.1365760475984821, 0x27100000, 0xa36e2eb1}, - /* 161 */ {4, 0.1364085852596902, 0x280c5a81, 0x991b4094}, - /* 162 */ {4, 0.1362425662114337, 0x290d7410, 0x8f19241e}, - /* 163 */ {4, 0.1360779687331669, 0x2a135bd1, 0x8564e6b7}, - /* 164 */ {4, 0.1359147715670014, 0x2b1e2100, 0x7bfbb5b4}, - /* 165 */ {4, 0.1357529539050150, 0x2c2dd2f1, 0x72dadcc8}, - /* 166 */ {4, 0.1355924953769863, 0x2d428110, 0x69ffc498}, - /* 167 */ {4, 0.1354333760385373, 0x2e5c3ae1, 0x6167f154}, - /* 168 */ {4, 0.1352755763596663, 0x2f7b1000, 0x5911016e}, - /* 169 */ {4, 0.1351190772136599, 0x309f1021, 0x50f8ac5f}, - /* 170 */ {4, 0.1349638598663645, 0x31c84b10, 0x491cc17c}, - /* 171 */ {4, 0.1348099059658079, 0x32f6d0b1, 0x417b26d8}, - /* 172 */ {4, 0.1346571975321549, 0x342ab100, 0x3a11d83b}, - /* 173 */ {4, 0.1345057169479844, 0x3563fc11, 0x32dee622}, - /* 174 */ {4, 0.1343554469488779, 0x36a2c210, 0x2be074cd}, - /* 175 */ {4, 0.1342063706143054, 0x37e71341, 0x2514bb58}, - /* 176 */ {4, 0.1340584713587980, 0x39310000, 0x1e7a02e7}, - /* 177 */ {4, 0.1339117329233981, 0x3a8098c1, 0x180ea5d0}, - /* 178 */ {4, 0.1337661393673756, 0x3bd5ee10, 0x11d10edd}, - /* 179 */ {4, 0.1336216750601996, 0x3d311091, 0xbbfb88e}, - /* 180 */ {4, 0.1334783246737591, 0x3e921100, 0x5d92c68}, - /* 181 */ {4, 0.1333360731748201, 0x3ff90031, 0x1c024c}, - /* 182 */ {4, 0.1331949058177136, 0x4165ef10, 0xf50dbfb2}, - /* 183 */ {4, 0.1330548081372441, 0x42d8eea1, 0xea30efa3}, - /* 184 */ {4, 0.1329157659418126, 0x44521000, 0xdf9f1316}, - /* 185 */ {4, 0.1327777653067443, 0x45d16461, 0xd555c0c9}, - /* 186 */ {4, 0.1326407925678156, 0x4756fd10, 0xcb52a684}, - /* 187 */ {4, 0.1325048343149731, 0x48e2eb71, 0xc193881f}, - /* 188 */ {4, 0.1323698773862368, 0x4a754100, 0xb8163e97}, - /* 189 */ {4, 0.1322359088617821, 0x4c0e0f51, 0xaed8b724}, - /* 190 */ {4, 0.1321029160581950, 0x4dad6810, 0xa5d8f269}, - /* 191 */ {4, 0.1319708865228925, 0x4f535d01, 0x9d15039d}, - /* 192 */ {4, 0.1318398080287045, 0x51000000, 0x948b0fcd}, - /* 193 */ {4, 0.1317096685686114, 0x52b36301, 0x8c394d1d}, - /* 194 */ {4, 0.1315804563506306, 0x546d9810, 0x841e0215}, - /* 195 */ {4, 0.1314521597928493, 0x562eb151, 0x7c3784f8}, - /* 196 */ {4, 0.1313247675185968, 0x57f6c100, 0x74843b1e}, - /* 197 */ {4, 0.1311982683517524, 0x59c5d971, 0x6d02985d}, - /* 198 */ {4, 0.1310726513121843, 0x5b9c0d10, 0x65b11e6e}, - /* 199 */ {4, 0.1309479056113158, 0x5d796e61, 0x5e8e5c64}, - /* 200 */ {4, 0.1308240206478128, 0x5f5e1000, 0x5798ee23}, - /* 201 */ {4, 0.1307009860033912, 0x614a04a1, 0x50cf7bde}, - /* 202 */ {4, 0.1305787914387386, 0x633d5f10, 0x4a30b99b}, - /* 203 */ {4, 0.1304574268895465, 0x65383231, 0x43bb66bd}, - /* 204 */ {4, 0.1303368824626505, 0x673a9100, 0x3d6e4d94}, - /* 205 */ {4, 0.1302171484322746, 0x69448e91, 0x374842ee}, - /* 206 */ {4, 0.1300982152363760, 0x6b563e10, 0x314825b0}, - /* 207 */ {4, 0.1299800734730872, 0x6d6fb2c1, 0x2b6cde75}, - /* 208 */ {4, 0.1298627138972530, 0x6f910000, 0x25b55f2e}, - /* 209 */ {4, 0.1297461274170591, 0x71ba3941, 0x2020a2c5}, - /* 210 */ {4, 0.1296303050907487, 0x73eb7210, 0x1aadaccb}, - /* 211 */ {4, 0.1295152381234257, 0x7624be11, 0x155b891f}, - /* 212 */ {4, 0.1294009178639407, 0x78663100, 0x10294ba2}, - /* 213 */ {4, 0.1292873358018581, 0x7aafdeb1, 0xb160fe9}, - /* 214 */ {4, 0.1291744835645007, 0x7d01db10, 0x620f8f6}, - /* 215 */ {4, 0.1290623529140715, 0x7f5c3a21, 0x14930ef}, - /* 216 */ {4, 0.1289509357448472, 0x81bf1000, 0xf91bd1b6}, - /* 217 */ {4, 0.1288402240804449, 0x842a70e1, 0xefdcb0c7}, - /* 218 */ {4, 0.1287302100711567, 0x869e7110, 0xe6d37b2a}, - /* 219 */ {4, 0.1286208859913518, 0x891b24f1, 0xddfeb94a}, - /* 220 */ {4, 0.1285122442369443, 0x8ba0a100, 0xd55cff6e}, - /* 221 */ {4, 0.1284042773229231, 0x8e2ef9d1, 0xcceced50}, - /* 222 */ {4, 0.1282969778809442, 0x90c64410, 0xc4ad2db2}, - /* 223 */ {4, 0.1281903386569819, 0x93669481, 0xbc9c75f9}, - /* 224 */ {4, 0.1280843525090381, 0x96100000, 0xb4b985cf}, - /* 225 */ {4, 0.1279790124049077, 0x98c29b81, 0xad0326c2}, - /* 226 */ {4, 0.1278743114199984, 0x9b7e7c10, 0xa5782bef}, - /* 227 */ {4, 0.1277702427352035, 0x9e43b6d1, 0x9e1771a9}, - /* 228 */ {4, 0.1276667996348261, 0xa1126100, 0x96dfdd2a}, - /* 229 */ {4, 0.1275639755045533, 0xa3ea8ff1, 0x8fd05c41}, - /* 230 */ {4, 0.1274617638294791, 0xa6cc5910, 0x88e7e509}, - /* 231 */ {4, 0.1273601581921741, 0xa9b7d1e1, 0x8225759d}, - /* 232 */ {4, 0.1272591522708010, 0xacad1000, 0x7b8813d3}, - /* 233 */ {4, 0.1271587398372755, 0xafac2921, 0x750eccf9}, - /* 234 */ {4, 0.1270589147554692, 0xb2b53310, 0x6eb8b595}, - /* 235 */ {4, 0.1269596709794558, 0xb5c843b1, 0x6884e923}, - /* 236 */ {4, 0.1268610025517973, 0xb8e57100, 0x627289db}, - /* 237 */ {4, 0.1267629036018709, 0xbc0cd111, 0x5c80c07b}, - /* 238 */ {4, 0.1266653683442337, 0xbf3e7a10, 0x56aebc07}, - /* 239 */ {4, 0.1265683910770258, 0xc27a8241, 0x50fbb19b}, - /* 240 */ {4, 0.1264719661804097, 0xc5c10000, 0x4b66dc33}, - /* 241 */ {4, 0.1263760881150453, 0xc91209c1, 0x45ef7c7c}, - /* 242 */ {4, 0.1262807514205999, 0xcc6db610, 0x4094d8a3}, - /* 243 */ {4, 0.1261859507142915, 0xcfd41b91, 0x3b563c24}, - /* 244 */ {4, 0.1260916806894653, 0xd3455100, 0x3632f7a5}, - /* 245 */ {4, 0.1259979361142023, 0xd6c16d31, 0x312a60c3}, - /* 246 */ {4, 0.1259047118299582, 0xda488710, 0x2c3bd1f0}, - /* 247 */ {4, 0.1258120027502338, 0xdddab5a1, 0x2766aa45}, - /* 248 */ {4, 0.1257198038592741, 0xe1781000, 0x22aa4d5f}, - /* 249 */ {4, 0.1256281102107963, 0xe520ad61, 0x1e06233c}, - /* 250 */ {4, 0.1255369169267456, 0xe8d4a510, 0x19799812}, - /* 251 */ {4, 0.1254462191960791, 0xec940e71, 0x15041c33}, - /* 252 */ {4, 0.1253560122735751, 0xf05f0100, 0x10a523e5}, - /* 253 */ {4, 0.1252662914786691, 0xf4359451, 0xc5c2749}, - /* 254 */ {4, 0.1251770521943144, 0xf817e010, 0x828a237}, - /* 255 */ {4, 0.1250882898658681, 0xfc05fc01, 0x40a1423}, -}; -#endif -#if BITS_PER_MP_LIMB == 64 -const struct bases __mp_bases[256] = -{ - /* 0 */ {0, 0.0, 0, 0}, - /* 1 */ {0, 1e38, 0, 0}, - /* 2 */ {64, 1.0000000000000000, CNST_LIMB(0x1), CNST_LIMB(0x0)}, - /* 3 */ {40, 0.6309297535714574, CNST_LIMB(0xa8b8b452291fe821), CNST_LIMB(0x846d550e37b5063d)}, - /* 4 */ {32, 0.5000000000000000, CNST_LIMB(0x2), CNST_LIMB(0x0)}, - /* 5 */ {27, 0.4306765580733931, CNST_LIMB(0x6765c793fa10079d), CNST_LIMB(0x3ce9a36f23c0fc90)}, - /* 6 */ {24, 0.3868528072345416, CNST_LIMB(0x41c21cb8e1000000), CNST_LIMB(0xf24f62335024a295)}, - /* 7 */ {22, 0.3562071871080222, CNST_LIMB(0x3642798750226111), CNST_LIMB(0x2df495ccaa57147b)}, - /* 8 */ {21, 0.3333333333333334, CNST_LIMB(0x3), CNST_LIMB(0x0)}, - /* 9 */ {20, 0.3154648767857287, CNST_LIMB(0xa8b8b452291fe821), CNST_LIMB(0x846d550e37b5063d)}, - /* 10 */ {19, 0.3010299956639811, CNST_LIMB(0x8ac7230489e80000), CNST_LIMB(0xd83c94fb6d2ac34a)}, - /* 11 */ {18, 0.2890648263178878, CNST_LIMB(0x4d28cb56c33fa539), CNST_LIMB(0xa8adf7ae45e7577b)}, - /* 12 */ {17, 0.2789429456511298, CNST_LIMB(0x1eca170c00000000), CNST_LIMB(0xa10c2bec5da8f8f)}, - /* 13 */ {17, 0.2702381544273197, CNST_LIMB(0x780c7372621bd74d), CNST_LIMB(0x10f4becafe412ec3)}, - /* 14 */ {16, 0.2626495350371936, CNST_LIMB(0x1e39a5057d810000), CNST_LIMB(0xf08480f672b4e86)}, - /* 15 */ {16, 0.2559580248098155, CNST_LIMB(0x5b27ac993df97701), CNST_LIMB(0x6779c7f90dc42f48)}, - /* 16 */ {16, 0.2500000000000000, CNST_LIMB(0x4), CNST_LIMB(0x0)}, - /* 17 */ {15, 0.2446505421182260, CNST_LIMB(0x27b95e997e21d9f1), CNST_LIMB(0x9c71e11bab279323)}, - /* 18 */ {15, 0.2398124665681315, CNST_LIMB(0x5da0e1e53c5c8000), CNST_LIMB(0x5dfaa697ec6f6a1c)}, - /* 19 */ {15, 0.2354089133666382, CNST_LIMB(0xd2ae3299c1c4aedb), CNST_LIMB(0x3711783f6be7e9ec)}, - /* 20 */ {14, 0.2313782131597592, CNST_LIMB(0x16bcc41e90000000), CNST_LIMB(0x6849b86a12b9b01e)}, - /* 21 */ {14, 0.2276702486969530, CNST_LIMB(0x2d04b7fdd9c0ef49), CNST_LIMB(0x6bf097ba5ca5e239)}, - /* 22 */ {14, 0.2242438242175754, CNST_LIMB(0x5658597bcaa24000), CNST_LIMB(0x7b8015c8d7af8f08)}, - /* 23 */ {14, 0.2210647294575037, CNST_LIMB(0xa0e2073737609371), CNST_LIMB(0x975a24b3a3151b38)}, - /* 24 */ {13, 0.2181042919855316, CNST_LIMB(0xc29e98000000000), CNST_LIMB(0x50bd367972689db1)}, - /* 25 */ {13, 0.2153382790366965, CNST_LIMB(0x14adf4b7320334b9), CNST_LIMB(0x8c240c4aecb13bb5)}, - /* 26 */ {13, 0.2127460535533632, CNST_LIMB(0x226ed36478bfa000), CNST_LIMB(0xdbd2e56854e118c9)}, - /* 27 */ {13, 0.2103099178571525, CNST_LIMB(0x383d9170b85ff80b), CNST_LIMB(0x2351ffcaa9c7c4ae)}, - /* 28 */ {13, 0.2080145976765095, CNST_LIMB(0x5a3c23e39c000000), CNST_LIMB(0x6b24188ca33b0636)}, - /* 29 */ {13, 0.2058468324604344, CNST_LIMB(0x8e65137388122bcd), CNST_LIMB(0xcc3dceaf2b8ba99d)}, - /* 30 */ {13, 0.2037950470905062, CNST_LIMB(0xdd41bb36d259e000), CNST_LIMB(0x2832e835c6c7d6b6)}, - /* 31 */ {12, 0.2018490865820999, CNST_LIMB(0xaee5720ee830681), CNST_LIMB(0x76b6aa272e1873c5)}, - /* 32 */ {12, 0.2000000000000000, CNST_LIMB(0x5), CNST_LIMB(0x0)}, - /* 33 */ {12, 0.1982398631705605, CNST_LIMB(0x172588ad4f5f0981), CNST_LIMB(0x61eaf5d402c7bf4f)}, - /* 34 */ {12, 0.1965616322328226, CNST_LIMB(0x211e44f7d02c1000), CNST_LIMB(0xeeb658123ffb27ec)}, - /* 35 */ {12, 0.1949590218937863, CNST_LIMB(0x2ee56725f06e5c71), CNST_LIMB(0x5d5e3762e6fdf509)}, - /* 36 */ {12, 0.1934264036172708, CNST_LIMB(0x41c21cb8e1000000), CNST_LIMB(0xf24f62335024a295)}, - /* 37 */ {12, 0.1919587200065601, CNST_LIMB(0x5b5b57f8a98a5dd1), CNST_LIMB(0x66ae7831762efb6f)}, - /* 38 */ {12, 0.1905514124267734, CNST_LIMB(0x7dcff8986ea31000), CNST_LIMB(0x47388865a00f544)}, - /* 39 */ {12, 0.1892003595168700, CNST_LIMB(0xabd4211662a6b2a1), CNST_LIMB(0x7d673c33a123b54c)}, - /* 40 */ {12, 0.1879018247091076, CNST_LIMB(0xe8d4a51000000000), CNST_LIMB(0x19799812dea11197)}, - /* 41 */ {11, 0.1866524112389434, CNST_LIMB(0x7a32956ad081b79), CNST_LIMB(0xc27e62e0686feae)}, - /* 42 */ {11, 0.1854490234153689, CNST_LIMB(0x9f49aaff0e86800), CNST_LIMB(0x9b6e7507064ce7c7)}, - /* 43 */ {11, 0.1842888331487062, CNST_LIMB(0xce583bb812d37b3), CNST_LIMB(0x3d9ac2bf66cfed94)}, - /* 44 */ {11, 0.1831692509136336, CNST_LIMB(0x109b79a654c00000), CNST_LIMB(0xed46bc50ce59712a)}, - /* 45 */ {11, 0.1820879004699383, CNST_LIMB(0x1543beff214c8b95), CNST_LIMB(0x813d97e2c89b8d46)}, - /* 46 */ {11, 0.1810425967800402, CNST_LIMB(0x1b149a79459a3800), CNST_LIMB(0x2e81751956af8083)}, - /* 47 */ {11, 0.1800313266566926, CNST_LIMB(0x224edfb5434a830f), CNST_LIMB(0xdd8e0a95e30c0988)}, - /* 48 */ {11, 0.1790522317510413, CNST_LIMB(0x2b3fb00000000000), CNST_LIMB(0x7ad4dd48a0b5b167)}, - /* 49 */ {11, 0.1781035935540111, CNST_LIMB(0x3642798750226111), CNST_LIMB(0x2df495ccaa57147b)}, - /* 50 */ {11, 0.1771838201355579, CNST_LIMB(0x43c33c1937564800), CNST_LIMB(0xe392010175ee5962)}, - /* 51 */ {11, 0.1762914343888821, CNST_LIMB(0x54411b2441c3cd8b), CNST_LIMB(0x84eaf11b2fe7738e)}, - /* 52 */ {11, 0.1754250635819545, CNST_LIMB(0x6851455acd400000), CNST_LIMB(0x3a1e3971e008995d)}, - /* 53 */ {11, 0.1745834300480449, CNST_LIMB(0x80a23b117c8feb6d), CNST_LIMB(0xfd7a462344ffce25)}, - /* 54 */ {11, 0.1737653428714400, CNST_LIMB(0x9dff7d32d5dc1800), CNST_LIMB(0x9eca40b40ebcef8a)}, - /* 55 */ {11, 0.1729696904450771, CNST_LIMB(0xc155af6faeffe6a7), CNST_LIMB(0x52fa161a4a48e43d)}, - /* 56 */ {11, 0.1721954337940981, CNST_LIMB(0xebb7392e00000000), CNST_LIMB(0x1607a2cbacf930c1)}, - /* 57 */ {10, 0.1714416005739134, CNST_LIMB(0x50633659656d971), CNST_LIMB(0x97a014f8e3be55f1)}, - /* 58 */ {10, 0.1707072796637201, CNST_LIMB(0x5fa8624c7fba400), CNST_LIMB(0x568df8b76cbf212c)}, - /* 59 */ {10, 0.1699916162869140, CNST_LIMB(0x717d9faa73c5679), CNST_LIMB(0x20ba7c4b4e6ef492)}, - /* 60 */ {10, 0.1692938075987814, CNST_LIMB(0x86430aac6100000), CNST_LIMB(0xe81ee46b9ef492f5)}, - /* 61 */ {10, 0.1686130986895011, CNST_LIMB(0x9e64d9944b57f29), CNST_LIMB(0x9dc0d10d51940416)}, - /* 62 */ {10, 0.1679487789570419, CNST_LIMB(0xba5ca5392cb0400), CNST_LIMB(0x5fa8ed2f450272a5)}, - /* 63 */ {10, 0.1673001788101741, CNST_LIMB(0xdab2ce1d022cd81), CNST_LIMB(0x2ba9eb8c5e04e641)}, - /* 64 */ {10, 0.1666666666666667, CNST_LIMB(0x6), CNST_LIMB(0x0)}, - /* 65 */ {10, 0.1660476462159378, CNST_LIMB(0x12aeed5fd3e2d281), CNST_LIMB(0xb67759cc00287bf1)}, - /* 66 */ {10, 0.1654425539190583, CNST_LIMB(0x15c3da1572d50400), CNST_LIMB(0x78621feeb7f4ed33)}, - /* 67 */ {10, 0.1648508567221604, CNST_LIMB(0x194c05534f75ee29), CNST_LIMB(0x43d55b5f72943bc0)}, - /* 68 */ {10, 0.1642720499620502, CNST_LIMB(0x1d56299ada100000), CNST_LIMB(0x173decb64d1d4409)}, - /* 69 */ {10, 0.1637056554452156, CNST_LIMB(0x21f2a089a4ff4f79), CNST_LIMB(0xe29fb54fd6b6074f)}, - /* 70 */ {10, 0.1631512196835108, CNST_LIMB(0x2733896c68d9a400), CNST_LIMB(0xa1f1f5c210d54e62)}, - /* 71 */ {10, 0.1626083122716341, CNST_LIMB(0x2d2cf2c33b533c71), CNST_LIMB(0x6aac7f9bfafd57b2)}, - /* 72 */ {10, 0.1620765243931223, CNST_LIMB(0x33f506e440000000), CNST_LIMB(0x3b563c2478b72ee2)}, - /* 73 */ {10, 0.1615554674429964, CNST_LIMB(0x3ba43bec1d062211), CNST_LIMB(0x12b536b574e92d1b)}, - /* 74 */ {10, 0.1610447717564444, CNST_LIMB(0x4455872d8fd4e400), CNST_LIMB(0xdf86c03020404fa5)}, - /* 75 */ {10, 0.1605440854340214, CNST_LIMB(0x4e2694539f2f6c59), CNST_LIMB(0xa34adf02234eea8e)}, - /* 76 */ {10, 0.1600530732548213, CNST_LIMB(0x5938006c18900000), CNST_LIMB(0x6f46eb8574eb59dd)}, - /* 77 */ {10, 0.1595714156699382, CNST_LIMB(0x65ad9912474aa649), CNST_LIMB(0x42459b481df47cec)}, - /* 78 */ {10, 0.1590988078692941, CNST_LIMB(0x73ae9ff4241ec400), CNST_LIMB(0x1b424b95d80ca505)}, - /* 79 */ {10, 0.1586349589155960, CNST_LIMB(0x836612ee9c4ce1e1), CNST_LIMB(0xf2c1b982203a0dac)}, - /* 80 */ {10, 0.1581795909397823, CNST_LIMB(0x9502f90000000000), CNST_LIMB(0xb7cdfd9d7bdbab7d)}, - /* 81 */ {10, 0.1577324383928644, CNST_LIMB(0xa8b8b452291fe821), CNST_LIMB(0x846d550e37b5063d)}, - /* 82 */ {10, 0.1572932473495469, CNST_LIMB(0xbebf59a07dab4400), CNST_LIMB(0x57931eeaf85cf64f)}, - /* 83 */ {10, 0.1568617748594410, CNST_LIMB(0xd7540d4093bc3109), CNST_LIMB(0x305a944507c82f47)}, - /* 84 */ {10, 0.1564377883420716, CNST_LIMB(0xf2b96616f1900000), CNST_LIMB(0xe007ccc9c22781a)}, - /* 85 */ {9, 0.1560210650222250, CNST_LIMB(0x336de62af2bca35), CNST_LIMB(0x3e92c42e000eeed4)}, - /* 86 */ {9, 0.1556113914024940, CNST_LIMB(0x39235ec33d49600), CNST_LIMB(0x1ebe59130db2795e)}, - /* 87 */ {9, 0.1552085627701551, CNST_LIMB(0x3f674e539585a17), CNST_LIMB(0x268859e90f51b89)}, - /* 88 */ {9, 0.1548123827357682, CNST_LIMB(0x4645b6958000000), CNST_LIMB(0xd24cde0463108cfa)}, - /* 89 */ {9, 0.1544226628011101, CNST_LIMB(0x4dcb74afbc49c19), CNST_LIMB(0xa536009f37adc383)}, - /* 90 */ {9, 0.1540392219542636, CNST_LIMB(0x56064e1d18d9a00), CNST_LIMB(0x7cea06ce1c9ace10)}, - /* 91 */ {9, 0.1536618862898642, CNST_LIMB(0x5f04fe2cd8a39fb), CNST_LIMB(0x58db032e72e8ba43)}, - /* 92 */ {9, 0.1532904886526781, CNST_LIMB(0x68d74421f5c0000), CNST_LIMB(0x388cc17cae105447)}, - /* 93 */ {9, 0.1529248683028321, CNST_LIMB(0x738df1f6ab4827d), CNST_LIMB(0x1b92672857620ce0)}, - /* 94 */ {9, 0.1525648706011593, CNST_LIMB(0x7f3afbc9cfb5e00), CNST_LIMB(0x18c6a9575c2ade4)}, - /* 95 */ {9, 0.1522103467132434, CNST_LIMB(0x8bf187fba88f35f), CNST_LIMB(0xd44da7da8e44b24f)}, - /* 96 */ {9, 0.1518611533308632, CNST_LIMB(0x99c600000000000), CNST_LIMB(0xaa2f78f1b4cc6794)}, - /* 97 */ {9, 0.1515171524096389, CNST_LIMB(0xa8ce21eb6531361), CNST_LIMB(0x843c067d091ee4cc)}, - /* 98 */ {9, 0.1511782109217764, CNST_LIMB(0xb92112c1a0b6200), CNST_LIMB(0x62005e1e913356e3)}, - /* 99 */ {9, 0.1508442006228941, CNST_LIMB(0xcad7718b8747c43), CNST_LIMB(0x4316eed01dedd518)}, - /* 100 */ {9, 0.1505149978319906, CNST_LIMB(0xde0b6b3a7640000), CNST_LIMB(0x2725dd1d243aba0e)}, - /* 101 */ {9, 0.1501904832236879, CNST_LIMB(0xf2d8cf5fe6d74c5), CNST_LIMB(0xddd9057c24cb54f)}, - /* 102 */ {9, 0.1498705416319474, CNST_LIMB(0x1095d25bfa712600), CNST_LIMB(0xedeee175a736d2a1)}, - /* 103 */ {9, 0.1495550618645152, CNST_LIMB(0x121b7c4c3698faa7), CNST_LIMB(0xc4699f3df8b6b328)}, - /* 104 */ {9, 0.1492439365274121, CNST_LIMB(0x13c09e8d68000000), CNST_LIMB(0x9ebbe7d859cb5a7c)}, - /* 105 */ {9, 0.1489370618588283, CNST_LIMB(0x15876ccb0b709ca9), CNST_LIMB(0x7c828b9887eb2179)}, - /* 106 */ {9, 0.1486343375718350, CNST_LIMB(0x17723c2976da2a00), CNST_LIMB(0x5d652ab99001adcf)}, - /* 107 */ {9, 0.1483356667053617, CNST_LIMB(0x198384e9c259048b), CNST_LIMB(0x4114f1754e5d7b32)}, - /* 108 */ {9, 0.1480409554829326, CNST_LIMB(0x1bbde41dfeec0000), CNST_LIMB(0x274b7c902f7e0188)}, - /* 109 */ {9, 0.1477501131786861, CNST_LIMB(0x1e241d6e3337910d), CNST_LIMB(0xfc9e0fbb32e210c)}, - /* 110 */ {9, 0.1474630519902391, CNST_LIMB(0x20b91cee9901ee00), CNST_LIMB(0xf4afa3e594f8ea1f)}, - /* 111 */ {9, 0.1471796869179852, CNST_LIMB(0x237ff9079863dfef), CNST_LIMB(0xcd85c32e9e4437b0)}, - /* 112 */ {9, 0.1468999356504447, CNST_LIMB(0x267bf47000000000), CNST_LIMB(0xa9bbb147e0dd92a8)}, - /* 113 */ {9, 0.1466237184553111, CNST_LIMB(0x29b08039fbeda7f1), CNST_LIMB(0x8900447b70e8eb82)}, - /* 114 */ {9, 0.1463509580758620, CNST_LIMB(0x2d213df34f65f200), CNST_LIMB(0x6b0a92adaad5848a)}, - /* 115 */ {9, 0.1460815796324244, CNST_LIMB(0x30d201d957a7c2d3), CNST_LIMB(0x4f990ad8740f0ee5)}, - /* 116 */ {9, 0.1458155105286054, CNST_LIMB(0x34c6d52160f40000), CNST_LIMB(0x3670a9663a8d3610)}, - /* 117 */ {9, 0.1455526803620167, CNST_LIMB(0x3903f855d8f4c755), CNST_LIMB(0x1f5c44188057be3c)}, - /* 118 */ {9, 0.1452930208392428, CNST_LIMB(0x3d8de5c8ec59b600), CNST_LIMB(0xa2bea956c4e4977)}, - /* 119 */ {9, 0.1450364656948130, CNST_LIMB(0x4269541d1ff01337), CNST_LIMB(0xed68b23033c3637e)}, - /* 120 */ {9, 0.1447829506139581, CNST_LIMB(0x479b38e478000000), CNST_LIMB(0xc99cf624e50549c5)}, - /* 121 */ {9, 0.1445324131589439, CNST_LIMB(0x4d28cb56c33fa539), CNST_LIMB(0xa8adf7ae45e7577b)}, - /* 122 */ {9, 0.1442847926987864, CNST_LIMB(0x5317871fa13aba00), CNST_LIMB(0x8a5bc740b1c113e5)}, - /* 123 */ {9, 0.1440400303421672, CNST_LIMB(0x596d2f44de9fa71b), CNST_LIMB(0x6e6c7efb81cfbb9b)}, - /* 124 */ {9, 0.1437980688733775, CNST_LIMB(0x602fd125c47c0000), CNST_LIMB(0x54aba5c5cada5f10)}, - /* 125 */ {9, 0.1435588526911310, CNST_LIMB(0x6765c793fa10079d), CNST_LIMB(0x3ce9a36f23c0fc90)}, - /* 126 */ {9, 0.1433223277500932, CNST_LIMB(0x6f15be069b847e00), CNST_LIMB(0x26fb43de2c8cd2a8)}, - /* 127 */ {9, 0.1430884415049874, CNST_LIMB(0x7746b3e82a77047f), CNST_LIMB(0x12b94793db8486a1)}, - /* 128 */ {9, 0.1428571428571428, CNST_LIMB(0x7), CNST_LIMB(0x0)}, - /* 129 */ {9, 0.1426283821033600, CNST_LIMB(0x894953f7ea890481), CNST_LIMB(0xdd5deca404c0156d)}, - /* 130 */ {9, 0.1424021108869747, CNST_LIMB(0x932abffea4848200), CNST_LIMB(0xbd51373330291de0)}, - /* 131 */ {9, 0.1421782821510107, CNST_LIMB(0x9dacb687d3d6a163), CNST_LIMB(0x9fa4025d66f23085)}, - /* 132 */ {9, 0.1419568500933153, CNST_LIMB(0xa8d8102a44840000), CNST_LIMB(0x842530ee2db4949d)}, - /* 133 */ {9, 0.1417377701235801, CNST_LIMB(0xb4b60f9d140541e5), CNST_LIMB(0x6aa7f2766b03dc25)}, - /* 134 */ {9, 0.1415209988221527, CNST_LIMB(0xc15065d4856e4600), CNST_LIMB(0x53035ba7ebf32e8d)}, - /* 135 */ {9, 0.1413064939005528, CNST_LIMB(0xceb1363f396d23c7), CNST_LIMB(0x3d12091fc9fb4914)}, - /* 136 */ {9, 0.1410942141636095, CNST_LIMB(0xdce31b2488000000), CNST_LIMB(0x28b1cb81b1ef1849)}, - /* 137 */ {9, 0.1408841194731412, CNST_LIMB(0xebf12a24bca135c9), CNST_LIMB(0x15c35be67ae3e2c9)}, - /* 138 */ {9, 0.1406761707131039, CNST_LIMB(0xfbe6f8dbf88f4a00), CNST_LIMB(0x42a17bd09be1ff0)}, - /* 139 */ {8, 0.1404703297561400, CNST_LIMB(0x1ef156c084ce761), CNST_LIMB(0x8bf461f03cf0bbf)}, - /* 140 */ {8, 0.1402665594314587, CNST_LIMB(0x20c4e3b94a10000), CNST_LIMB(0xf3fbb43f68a32d05)}, - /* 141 */ {8, 0.1400648234939879, CNST_LIMB(0x22b0695a08ba421), CNST_LIMB(0xd84f44c48564dc19)}, - /* 142 */ {8, 0.1398650865947379, CNST_LIMB(0x24b4f35d7a4c100), CNST_LIMB(0xbe58ebcce7956abe)}, - /* 143 */ {8, 0.1396673142523192, CNST_LIMB(0x26d397284975781), CNST_LIMB(0xa5fac463c7c134b7)}, - /* 144 */ {8, 0.1394714728255649, CNST_LIMB(0x290d74100000000), CNST_LIMB(0x8f19241e28c7d757)}, - /* 145 */ {8, 0.1392775294872041, CNST_LIMB(0x2b63b3a37866081), CNST_LIMB(0x799a6d046c0ae1ae)}, - /* 146 */ {8, 0.1390854521985406, CNST_LIMB(0x2dd789f4d894100), CNST_LIMB(0x6566e37d746a9e40)}, - /* 147 */ {8, 0.1388952096850913, CNST_LIMB(0x306a35e51b58721), CNST_LIMB(0x526887dbfb5f788f)}, - /* 148 */ {8, 0.1387067714131417, CNST_LIMB(0x331d01712e10000), CNST_LIMB(0x408af3382b8efd3d)}, - /* 149 */ {8, 0.1385201075671774, CNST_LIMB(0x35f14200a827c61), CNST_LIMB(0x2fbb374806ec05f1)}, - /* 150 */ {8, 0.1383351890281539, CNST_LIMB(0x38e858b62216100), CNST_LIMB(0x1fe7c0f0afce87fe)}, - /* 151 */ {8, 0.1381519873525671, CNST_LIMB(0x3c03b2c13176a41), CNST_LIMB(0x11003d517540d32e)}, - /* 152 */ {8, 0.1379704747522905, CNST_LIMB(0x3f44c9b21000000), CNST_LIMB(0x2f5810f98eff0dc)}, - /* 153 */ {8, 0.1377906240751463, CNST_LIMB(0x42ad23cef3113c1), CNST_LIMB(0xeb72e35e7840d910)}, - /* 154 */ {8, 0.1376124087861776, CNST_LIMB(0x463e546b19a2100), CNST_LIMB(0xd27de19593dc3614)}, - /* 155 */ {8, 0.1374358029495937, CNST_LIMB(0x49f9fc3f96684e1), CNST_LIMB(0xbaf391fd3e5e6fc2)}, - /* 156 */ {8, 0.1372607812113589, CNST_LIMB(0x4de1c9c5dc10000), CNST_LIMB(0xa4bd38c55228c81d)}, - /* 157 */ {8, 0.1370873187823978, CNST_LIMB(0x51f77994116d2a1), CNST_LIMB(0x8fc5a8de8e1de782)}, - /* 158 */ {8, 0.1369153914223921, CNST_LIMB(0x563cd6bb3398100), CNST_LIMB(0x7bf9265bea9d3a3b)}, - /* 159 */ {8, 0.1367449754241439, CNST_LIMB(0x5ab3bb270beeb01), CNST_LIMB(0x69454b325983dccd)}, - /* 160 */ {8, 0.1365760475984821, CNST_LIMB(0x5f5e10000000000), CNST_LIMB(0x5798ee2308c39df9)}, - /* 161 */ {8, 0.1364085852596902, CNST_LIMB(0x643dce0ec16f501), CNST_LIMB(0x46e40ba0fa66a753)}, - /* 162 */ {8, 0.1362425662114337, CNST_LIMB(0x6954fe21e3e8100), CNST_LIMB(0x3717b0870b0db3a7)}, - /* 163 */ {8, 0.1360779687331669, CNST_LIMB(0x6ea5b9755f440a1), CNST_LIMB(0x2825e6775d11cdeb)}, - /* 164 */ {8, 0.1359147715670014, CNST_LIMB(0x74322a1c0410000), CNST_LIMB(0x1a01a1c09d1b4dac)}, - /* 165 */ {8, 0.1357529539050150, CNST_LIMB(0x79fc8b6ae8a46e1), CNST_LIMB(0xc9eb0a8bebc8f3e)}, - /* 166 */ {8, 0.1355924953769863, CNST_LIMB(0x80072a66d512100), CNST_LIMB(0xffe357ff59e6a004)}, - /* 167 */ {8, 0.1354333760385373, CNST_LIMB(0x86546633b42b9c1), CNST_LIMB(0xe7dfd1be05fa61a8)}, - /* 168 */ {8, 0.1352755763596663, CNST_LIMB(0x8ce6b0861000000), CNST_LIMB(0xd11ed6fc78f760e5)}, - /* 169 */ {8, 0.1351190772136599, CNST_LIMB(0x93c08e16a022441), CNST_LIMB(0xbb8db609dd29ebfe)}, - /* 170 */ {8, 0.1349638598663645, CNST_LIMB(0x9ae49717f026100), CNST_LIMB(0xa71aec8d1813d532)}, - /* 171 */ {8, 0.1348099059658079, CNST_LIMB(0xa25577ae24c1a61), CNST_LIMB(0x93b612a9f20fbc02)}, - /* 172 */ {8, 0.1346571975321549, CNST_LIMB(0xaa15f068e610000), CNST_LIMB(0x814fc7b19a67d317)}, - /* 173 */ {8, 0.1345057169479844, CNST_LIMB(0xb228d6bf7577921), CNST_LIMB(0x6fd9a03f2e0a4b7c)}, - /* 174 */ {8, 0.1343554469488779, CNST_LIMB(0xba91158ef5c4100), CNST_LIMB(0x5f4615a38d0d316e)}, - /* 175 */ {8, 0.1342063706143054, CNST_LIMB(0xc351ad9aec0b681), CNST_LIMB(0x4f8876863479a286)}, - /* 176 */ {8, 0.1340584713587980, CNST_LIMB(0xcc6db6100000000), CNST_LIMB(0x4094d8a3041b60eb)}, - /* 177 */ {8, 0.1339117329233981, CNST_LIMB(0xd5e85d09025c181), CNST_LIMB(0x32600b8ed883a09b)}, - /* 178 */ {8, 0.1337661393673756, CNST_LIMB(0xdfc4e816401c100), CNST_LIMB(0x24df8c6eb4b6d1f1)}, - /* 179 */ {8, 0.1336216750601996, CNST_LIMB(0xea06b4c72947221), CNST_LIMB(0x18097a8ee151acef)}, - /* 180 */ {8, 0.1334783246737591, CNST_LIMB(0xf4b139365210000), CNST_LIMB(0xbd48cc8ec1cd8e3)}, - /* 181 */ {8, 0.1333360731748201, CNST_LIMB(0xffc80497d520961), CNST_LIMB(0x3807a8d67485fb)}, - /* 182 */ {8, 0.1331949058177136, CNST_LIMB(0x10b4ebfca1dee100), CNST_LIMB(0xea5768860b62e8d8)}, - /* 183 */ {8, 0.1330548081372441, CNST_LIMB(0x117492de921fc141), CNST_LIMB(0xd54faf5b635c5005)}, - /* 184 */ {8, 0.1329157659418126, CNST_LIMB(0x123bb2ce41000000), CNST_LIMB(0xc14a56233a377926)}, - /* 185 */ {8, 0.1327777653067443, CNST_LIMB(0x130a8b6157bdecc1), CNST_LIMB(0xae39a88db7cd329f)}, - /* 186 */ {8, 0.1326407925678156, CNST_LIMB(0x13e15dede0e8a100), CNST_LIMB(0x9c10bde69efa7ab6)}, - /* 187 */ {8, 0.1325048343149731, CNST_LIMB(0x14c06d941c0ca7e1), CNST_LIMB(0x8ac36c42a2836497)}, - /* 188 */ {8, 0.1323698773862368, CNST_LIMB(0x15a7ff487a810000), CNST_LIMB(0x7a463c8b84f5ef67)}, - /* 189 */ {8, 0.1322359088617821, CNST_LIMB(0x169859ddc5c697a1), CNST_LIMB(0x6a8e5f5ad090fd4b)}, - /* 190 */ {8, 0.1321029160581950, CNST_LIMB(0x1791c60f6fed0100), CNST_LIMB(0x5b91a2943596fc56)}, - /* 191 */ {8, 0.1319708865228925, CNST_LIMB(0x18948e8c0e6fba01), CNST_LIMB(0x4d4667b1c468e8f0)}, - /* 192 */ {8, 0.1318398080287045, CNST_LIMB(0x19a1000000000000), CNST_LIMB(0x3fa39ab547994daf)}, - /* 193 */ {8, 0.1317096685686114, CNST_LIMB(0x1ab769203dafc601), CNST_LIMB(0x32a0a9b2faee1e2a)}, - /* 194 */ {8, 0.1315804563506306, CNST_LIMB(0x1bd81ab557f30100), CNST_LIMB(0x26357ceac0e96962)}, - /* 195 */ {8, 0.1314521597928493, CNST_LIMB(0x1d0367a69fed1ba1), CNST_LIMB(0x1a5a6f65caa5859e)}, - /* 196 */ {8, 0.1313247675185968, CNST_LIMB(0x1e39a5057d810000), CNST_LIMB(0xf08480f672b4e86)}, - /* 197 */ {8, 0.1311982683517524, CNST_LIMB(0x1f7b2a18f29ac3e1), CNST_LIMB(0x4383340615612ca)}, - /* 198 */ {8, 0.1310726513121843, CNST_LIMB(0x20c850694c2aa100), CNST_LIMB(0xf3c77969ee4be5a2)}, - /* 199 */ {8, 0.1309479056113158, CNST_LIMB(0x222173cc014980c1), CNST_LIMB(0xe00993cc187c5ec9)}, - /* 200 */ {8, 0.1308240206478128, CNST_LIMB(0x2386f26fc1000000), CNST_LIMB(0xcd2b297d889bc2b6)}, - /* 201 */ {8, 0.1307009860033912, CNST_LIMB(0x24f92ce8af296d41), CNST_LIMB(0xbb214d5064862b22)}, - /* 202 */ {8, 0.1305787914387386, CNST_LIMB(0x2678863cd0ece100), CNST_LIMB(0xa9e1a7ca7ea10e20)}, - /* 203 */ {8, 0.1304574268895465, CNST_LIMB(0x280563f0a9472d61), CNST_LIMB(0x99626e72b39ea0cf)}, - /* 204 */ {8, 0.1303368824626505, CNST_LIMB(0x29a02e1406210000), CNST_LIMB(0x899a5ba9c13fafd9)}, - /* 205 */ {8, 0.1302171484322746, CNST_LIMB(0x2b494f4efe6d2e21), CNST_LIMB(0x7a80a705391e96ff)}, - /* 206 */ {8, 0.1300982152363760, CNST_LIMB(0x2d0134ef21cbc100), CNST_LIMB(0x6c0cfe23de23042a)}, - /* 207 */ {8, 0.1299800734730872, CNST_LIMB(0x2ec84ef4da2ef581), CNST_LIMB(0x5e377df359c944dd)}, - /* 208 */ {8, 0.1298627138972530, CNST_LIMB(0x309f102100000000), CNST_LIMB(0x50f8ac5fc8f53985)}, - /* 209 */ {8, 0.1297461274170591, CNST_LIMB(0x3285ee02a1420281), CNST_LIMB(0x44497266278e35b7)}, - /* 210 */ {8, 0.1296303050907487, CNST_LIMB(0x347d6104fc324100), CNST_LIMB(0x382316831f7ee175)}, - /* 211 */ {8, 0.1295152381234257, CNST_LIMB(0x3685e47dade53d21), CNST_LIMB(0x2c7f377833b8946e)}, - /* 212 */ {8, 0.1294009178639407, CNST_LIMB(0x389ff6bb15610000), CNST_LIMB(0x2157c761ab4163ef)}, - /* 213 */ {8, 0.1292873358018581, CNST_LIMB(0x3acc1912ebb57661), CNST_LIMB(0x16a7071803cc49a9)}, - /* 214 */ {8, 0.1291744835645007, CNST_LIMB(0x3d0acff111946100), CNST_LIMB(0xc6781d80f8224fc)}, - /* 215 */ {8, 0.1290623529140715, CNST_LIMB(0x3f5ca2e692eaf841), CNST_LIMB(0x294092d370a900b)}, - /* 216 */ {8, 0.1289509357448472, CNST_LIMB(0x41c21cb8e1000000), CNST_LIMB(0xf24f62335024a295)}, - /* 217 */ {8, 0.1288402240804449, CNST_LIMB(0x443bcb714399a5c1), CNST_LIMB(0xe03b98f103fad6d2)}, - /* 218 */ {8, 0.1287302100711567, CNST_LIMB(0x46ca406c81af2100), CNST_LIMB(0xcee3d32cad2a9049)}, - /* 219 */ {8, 0.1286208859913518, CNST_LIMB(0x496e106ac22aaae1), CNST_LIMB(0xbe3f9df9277fdada)}, - /* 220 */ {8, 0.1285122442369443, CNST_LIMB(0x4c27d39fa5410000), CNST_LIMB(0xae46f0d94c05e933)}, - /* 221 */ {8, 0.1284042773229231, CNST_LIMB(0x4ef825c296e43ca1), CNST_LIMB(0x9ef2280fb437a33d)}, - /* 222 */ {8, 0.1282969778809442, CNST_LIMB(0x51dfa61f5ad88100), CNST_LIMB(0x9039ff426d3f284b)}, - /* 223 */ {8, 0.1281903386569819, CNST_LIMB(0x54def7a6d2f16901), CNST_LIMB(0x82178c6d6b51f8f4)}, - /* 224 */ {8, 0.1280843525090381, CNST_LIMB(0x57f6c10000000000), CNST_LIMB(0x74843b1ee4c1e053)}, - /* 225 */ {8, 0.1279790124049077, CNST_LIMB(0x5b27ac993df97701), CNST_LIMB(0x6779c7f90dc42f48)}, - /* 226 */ {8, 0.1278743114199984, CNST_LIMB(0x5e7268b9bbdf8100), CNST_LIMB(0x5af23c74f9ad9fe9)}, - /* 227 */ {8, 0.1277702427352035, CNST_LIMB(0x61d7a7932ff3d6a1), CNST_LIMB(0x4ee7eae2acdc617e)}, - /* 228 */ {8, 0.1276667996348261, CNST_LIMB(0x65581f53c8c10000), CNST_LIMB(0x43556aa2ac262a0b)}, - /* 229 */ {8, 0.1275639755045533, CNST_LIMB(0x68f48a385b8320e1), CNST_LIMB(0x3835949593b8ddd1)}, - /* 230 */ {8, 0.1274617638294791, CNST_LIMB(0x6cada69ed07c2100), CNST_LIMB(0x2d837fbe78458762)}, - /* 231 */ {8, 0.1273601581921741, CNST_LIMB(0x70843718cdbf27c1), CNST_LIMB(0x233a7e150a54a555)}, - /* 232 */ {8, 0.1272591522708010, CNST_LIMB(0x7479027ea1000000), CNST_LIMB(0x19561984a50ff8fe)}, - /* 233 */ {8, 0.1271587398372755, CNST_LIMB(0x788cd40268f39641), CNST_LIMB(0xfd211159fe3490f)}, - /* 234 */ {8, 0.1270589147554692, CNST_LIMB(0x7cc07b437ecf6100), CNST_LIMB(0x6aa563e655033e3)}, - /* 235 */ {8, 0.1269596709794558, CNST_LIMB(0x8114cc6220762061), CNST_LIMB(0xfbb614b3f2d3b14c)}, - /* 236 */ {8, 0.1268610025517973, CNST_LIMB(0x858aa0135be10000), CNST_LIMB(0xeac0f8837fb05773)}, - /* 237 */ {8, 0.1267629036018709, CNST_LIMB(0x8a22d3b53c54c321), CNST_LIMB(0xda6e4c10e8615ca5)}, - /* 238 */ {8, 0.1266653683442337, CNST_LIMB(0x8ede496339f34100), CNST_LIMB(0xcab755a8d01fa67f)}, - /* 239 */ {8, 0.1265683910770258, CNST_LIMB(0x93bde80aec3a1481), CNST_LIMB(0xbb95a9ae71aa3e0c)}, - /* 240 */ {8, 0.1264719661804097, CNST_LIMB(0x98c29b8100000000), CNST_LIMB(0xad0326c296b4f529)}, - /* 241 */ {8, 0.1263760881150453, CNST_LIMB(0x9ded549671832381), CNST_LIMB(0x9ef9f21eed31b7c1)}, - /* 242 */ {8, 0.1262807514205999, CNST_LIMB(0xa33f092e0b1ac100), CNST_LIMB(0x91747422be14b0b2)}, - /* 243 */ {8, 0.1261859507142915, CNST_LIMB(0xa8b8b452291fe821), CNST_LIMB(0x846d550e37b5063d)}, - /* 244 */ {8, 0.1260916806894653, CNST_LIMB(0xae5b564ac3a10000), CNST_LIMB(0x77df79e9a96c06f6)}, - /* 245 */ {8, 0.1259979361142023, CNST_LIMB(0xb427f4b3be74c361), CNST_LIMB(0x6bc6019636c7d0c2)}, - /* 246 */ {8, 0.1259047118299582, CNST_LIMB(0xba1f9a938041e100), CNST_LIMB(0x601c4205aebd9e47)}, - /* 247 */ {8, 0.1258120027502338, CNST_LIMB(0xc0435871d1110f41), CNST_LIMB(0x54ddc59756f05016)}, - /* 248 */ {8, 0.1257198038592741, CNST_LIMB(0xc694446f01000000), CNST_LIMB(0x4a0648979c838c18)}, - /* 249 */ {8, 0.1256281102107963, CNST_LIMB(0xcd137a5b57ac3ec1), CNST_LIMB(0x3f91b6e0bb3a053d)}, - /* 250 */ {8, 0.1255369169267456, CNST_LIMB(0xd3c21bcecceda100), CNST_LIMB(0x357c299a88ea76a5)}, - /* 251 */ {8, 0.1254462191960791, CNST_LIMB(0xdaa150410b788de1), CNST_LIMB(0x2bc1e517aecc56e3)}, - /* 252 */ {8, 0.1253560122735751, CNST_LIMB(0xe1b24521be010000), CNST_LIMB(0x225f56ceb3da9f5d)}, - /* 253 */ {8, 0.1252662914786691, CNST_LIMB(0xe8f62df12777c1a1), CNST_LIMB(0x1951136d53ad63ac)}, - /* 254 */ {8, 0.1251770521943144, CNST_LIMB(0xf06e445906fc0100), CNST_LIMB(0x1093d504b3cd7d93)}, - /* 255 */ {8, 0.1250882898658681, CNST_LIMB(0xf81bc845c81bf801), CNST_LIMB(0x824794d1ec1814f)}, -}; -#endif diff --git a/rts/gmp/mpn/ns32k/add_n.s b/rts/gmp/mpn/ns32k/add_n.s deleted file mode 100644 index bd063d0..0000000 --- a/rts/gmp/mpn/ns32k/add_n.s +++ /dev/null @@ -1,46 +0,0 @@ -# ns32000 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -# sum in a third limb vector. - -# Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - - .align 1 -.globl ___gmpn_add_n -___gmpn_add_n: - save [r3,r4,r5] - negd 28(sp),r3 - movd r3,r0 - lshd 2,r0 - movd 24(sp),r4 - subd r0,r4 # r4 -> to end of S2 - movd 20(sp),r5 - subd r0,r5 # r5 -> to end of S1 - movd 16(sp),r2 - subd r0,r2 # r2 -> to end of RES - subd r0,r0 # cy = 0 - -Loop: movd r5[r3:d],r0 - addcd r4[r3:d],r0 - movd r0,r2[r3:d] - acbd 1,r3,Loop - - scsd r0 # r0 = cy. - restore [r5,r4,r3] - ret 0 diff --git a/rts/gmp/mpn/ns32k/addmul_1.s b/rts/gmp/mpn/ns32k/addmul_1.s deleted file mode 100644 index df0dcdd..0000000 --- a/rts/gmp/mpn/ns32k/addmul_1.s +++ /dev/null @@ -1,48 +0,0 @@ -# ns32000 __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - - .align 1 -.globl ___gmpn_addmul_1 -___gmpn_addmul_1: - save [r3,r4,r5,r6,r7] - negd 24(sp),r4 - movd r4,r0 - lshd 2,r0 - movd 20(sp),r5 - subd r0,r5 # r5 -> to end of S1 - movd 16(sp),r6 - subd r0,r6 # r6 -> to end of RES - subd r0,r0 # r0 = 0, cy = 0 - movd 28(sp),r7 # r7 = s2_limb - -Loop: movd r5[r4:d],r2 - meid r7,r2 # r2 = low_prod, r3 = high_prod - addcd r0,r2 # r2 = low_prod + cy_limb - movd r3,r0 # r0 = new cy_limb - addcd 0,r0 - addd r2,r6[r4:d] - acbd 1,r4,Loop - - addcd 0,r0 - restore [r7,r6,r5,r4,r3] - ret 0 diff --git a/rts/gmp/mpn/ns32k/mul_1.s b/rts/gmp/mpn/ns32k/mul_1.s deleted file mode 100644 index 0a77efb..0000000 --- a/rts/gmp/mpn/ns32k/mul_1.s +++ /dev/null @@ -1,47 +0,0 @@ -# ns32000 __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - - .align 1 -.globl ___gmpn_mul_1 -___gmpn_mul_1: - save [r3,r4,r5,r6,r7] - negd 24(sp),r4 - movd r4,r0 - lshd 2,r0 - movd 20(sp),r5 - subd r0,r5 # r5 -> to end of S1 - movd 16(sp),r6 - subd r0,r6 # r6 -> to end of RES - subd r0,r0 # r0 = 0, cy = 0 - movd 28(sp),r7 # r7 = s2_limb - -Loop: movd r5[r4:d],r2 - meid r7,r2 # r2 = low_prod, r3 = high_prod - addcd r0,r2 # r2 = low_prod + cy_limb - movd r3,r0 # r0 = new cy_limb - movd r2,r6[r4:d] - acbd 1,r4,Loop - - addcd 0,r0 - restore [r7,r6,r5,r4,r3] - ret 0 diff --git a/rts/gmp/mpn/ns32k/sub_n.s b/rts/gmp/mpn/ns32k/sub_n.s deleted file mode 100644 index cd89f4f..0000000 --- a/rts/gmp/mpn/ns32k/sub_n.s +++ /dev/null @@ -1,46 +0,0 @@ -# ns32000 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -# store difference in a third limb vector. - -# Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - - .align 1 -.globl ___gmpn_sub_n -___gmpn_sub_n: - save [r3,r4,r5] - negd 28(sp),r3 - movd r3,r0 - lshd 2,r0 - movd 24(sp),r4 - subd r0,r4 # r4 -> to end of S2 - movd 20(sp),r5 - subd r0,r5 # r5 -> to end of S1 - movd 16(sp),r2 - subd r0,r2 # r2 -> to end of RES - subd r0,r0 # cy = 0 - -Loop: movd r5[r3:d],r0 - subcd r4[r3:d],r0 - movd r0,r2[r3:d] - acbd 1,r3,Loop - - scsd r0 # r0 = cy. - restore [r5,r4,r3] - ret 0 diff --git a/rts/gmp/mpn/ns32k/submul_1.s b/rts/gmp/mpn/ns32k/submul_1.s deleted file mode 100644 index f811aed..0000000 --- a/rts/gmp/mpn/ns32k/submul_1.s +++ /dev/null @@ -1,48 +0,0 @@ -# ns32000 __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract -# the result from a second limb vector. - -# Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - - .align 1 -.globl ___gmpn_submul_1 -___gmpn_submul_1: - save [r3,r4,r5,r6,r7] - negd 24(sp),r4 - movd r4,r0 - lshd 2,r0 - movd 20(sp),r5 - subd r0,r5 # r5 -> to end of S1 - movd 16(sp),r6 - subd r0,r6 # r6 -> to end of RES - subd r0,r0 # r0 = 0, cy = 0 - movd 28(sp),r7 # r7 = s2_limb - -Loop: movd r5[r4:d],r2 - meid r7,r2 # r2 = low_prod, r3 = high_prod - addcd r0,r2 # r2 = low_prod + cy_limb - movd r3,r0 # r0 = new cy_limb - addcd 0,r0 - subd r2,r6[r4:d] - acbd 1,r4,Loop - - addcd 0,r0 - restore [r7,r6,r5,r4,r3] - ret 0 diff --git a/rts/gmp/mpn/pa64/README b/rts/gmp/mpn/pa64/README deleted file mode 100644 index 8d2976d..0000000 --- a/rts/gmp/mpn/pa64/README +++ /dev/null @@ -1,38 +0,0 @@ -This directory contains mpn functions for 64-bit PA-RISC 2.0. - -RELEVANT OPTIMIZATION ISSUES - -The PA8000 has a multi-issue pipeline with large buffers for instructions -awaiting pending results. Therefore, no latency scheduling is necessary -(and might actually be harmful). - -Two 64-bit loads can be completed per cycle. One 64-bit store can be -completed per cycle. A store cannot complete in the same cycle as a load. - -STATUS - -* mpn_lshift, mpn_rshift, mpn_add_n, mpn_sub_n are all well-tuned and run at - the peak cache bandwidth; 1.5 cycles/limb for shifting and 2.0 cycles/limb - for add/subtract. - -* The multiplication functions run at 11 cycles/limb. The cache bandwidth - allows 7.5 cycles/limb. Perhaps it would be possible, using unrolling or - better scheduling, to get closer to the cache bandwidth limit. - -* xaddmul_1.S contains a quicker method for forming the 128 bit product. It - uses some fewer operations, and keep the carry flag live across the loop - boundary. But it seems hard to make it run more than 1/4 cycle faster - than the old code. Perhaps we really ought to unroll this loop be 2x? - 2x should suffice since register latency schedling is never needed, - but the unrolling would hide the store-load latency. Here is a sketch: - - 1. A multiply and store 64-bit products - 2. B sum 64-bit products 128-bit product - 3. B load 64-bit products to integer registers - 4. B multiply and store 64-bit products - 5. A sum 64-bit products 128-bit product - 6. A load 64-bit products to integer registers - 7. goto 1 - - In practice, adjacent groups (1 and 2, 2 and 3, etc) will be interleaved - for better instruction mix. diff --git a/rts/gmp/mpn/pa64/add_n.s b/rts/gmp/mpn/pa64/add_n.s deleted file mode 100644 index 22ff19c..0000000 --- a/rts/gmp/mpn/pa64/add_n.s +++ /dev/null @@ -1,90 +0,0 @@ -; HP-PA 2.0 __gmpn_add_n -- Add two limb vectors of the same length > 0 and -; store sum in a third limb vector. - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .level 2.0n - .code - .export __gmpn_add_n,entry -__gmpn_add_n - .proc - .callinfo frame=0,args_saved - .entry - - sub %r0,%r23,%r22 - depw,z %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - depw,z %r22,28,3,%r22 ; r22 = 8 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - sub %r26,%r22,%r26 ; offset res_ptr - blr %r28,%r0 ; branch into loop - add %r0,%r0,%r0 ; reset carry - -L$loop ldd 0(%r25),%r20 - ldd 0(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,0(%r26) -L$7 ldd 8(%r25),%r21 - ldd 8(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,8(%r26) -L$6 ldd 16(%r25),%r20 - ldd 16(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,16(%r26) -L$5 ldd 24(%r25),%r21 - ldd 24(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,24(%r26) -L$4 ldd 32(%r25),%r20 - ldd 32(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,32(%r26) -L$3 ldd 40(%r25),%r21 - ldd 40(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,40(%r26) -L$2 ldd 48(%r25),%r20 - ldd 48(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,48(%r26) -L$1 ldd 56(%r25),%r21 - ldo 64(%r25),%r25 - ldd 56(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,56(%r26) - ldo 64(%r24),%r24 - addib,> -8,%r23,L$loop - ldo 64(%r26),%r26 - - add,dc %r0,%r0,%r29 - bve (%r2) - .exit - ldi 0,%r28 - .procend diff --git a/rts/gmp/mpn/pa64/addmul_1.S b/rts/gmp/mpn/pa64/addmul_1.S deleted file mode 100644 index b1885b4..0000000 --- a/rts/gmp/mpn/pa64/addmul_1.S +++ /dev/null @@ -1,167 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_addmul_1 -- Multiply a limb vector with a limb and -; add the result to a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb -56(%r30) - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0n - .code - .export __gmpn_addmul_1,entry -__gmpn_addmul_1 - .proc - .callinfo frame=128,no_calls - .entry - fldd -56(%r30),%fr5 ; s2limb passed on stack - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,rlimb,rlimb - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - add t4,rlimb,t3 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,rlimb,rlimb - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - add t4,rlimb,t3 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,rlimb,rlimb - add,dc t2,hi,cylimb - add t4,rlimb,t3 - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - extrd,u cylimb,31,32,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64/gmp-mparam.h b/rts/gmp/mpn/pa64/gmp-mparam.h deleted file mode 100644 index 847735b..0000000 --- a/rts/gmp/mpn/pa64/gmp-mparam.h +++ /dev/null @@ -1,65 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values were measured in a PA8000 using the system compiler version - A.10.32.30. Presumably the PA8200 and PA8500 have the same timing - characteristic, but GCC might give somewhat different results. */ -/* Generated by tuneup.c, 2000-07-25. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 16 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 105 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 40 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 116 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 72 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 94 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 50 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 46 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 1 -#endif diff --git a/rts/gmp/mpn/pa64/lshift.s b/rts/gmp/mpn/pa64/lshift.s deleted file mode 100644 index 994bc1c..0000000 --- a/rts/gmp/mpn/pa64/lshift.s +++ /dev/null @@ -1,103 +0,0 @@ -; HP-PA 2.0 __gmpn_lshift -- - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; size gr24 -; cnt gr23 - -; This runs at 1.5 cycles/limb on PA8000. - - .level 2.0n - .code - .export __gmpn_lshift,entry -__gmpn_lshift - .proc - .callinfo frame=0,args_saved - .entry - - shladd %r24,3,%r25,%r25 - shladd %r24,3,%r26,%r26 - subi 64,%r23,%r23 - mtsar %r23 - ldd -8(%r25),%r21 - addib,= -1,%r24,L$end - shrpd %r0,%r21,%sar,%r29 ; compute carry out limb - depw,z %r24,31,3,%r28 ; r28 = (size & 7) - sub %r0,%r24,%r22 - depw,z %r22,28,3,%r22 ; r22 = 8 * (-size & 7) - add %r25,%r22,%r25 ; offset s1_ptr - blr %r28,%r0 ; branch into jump table - add %r26,%r22,%r26 ; offset res_ptr - 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 - -L$loop -L$0 ldd -16(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-8(%r26) -L$7 ldd -24(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-16(%r26) -L$6 ldd -32(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-24(%r26) -L$5 ldd -40(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-32(%r26) -L$4 ldd -48(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-40(%r26) -L$3 ldd -56(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-48(%r26) -L$2 ldd -64(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-56(%r26) -L$1 ldd -72(%r25),%r21 - ldo -64(%r25),%r25 - shrpd %r20,%r21,%sar,%r20 - std %r20,-64(%r26) - addib,> -8,%r24,L$loop - ldo -64(%r26),%r26 - -L$end shrpd %r21,%r0,%sar,%r21 - std %r21,-8(%r26) - bve (%r2) - .exit - extrd,u %r29,31,32,%r28 - .procend diff --git a/rts/gmp/mpn/pa64/mul_1.S b/rts/gmp/mpn/pa64/mul_1.S deleted file mode 100644 index ab310c1..0000000 --- a/rts/gmp/mpn/pa64/mul_1.S +++ /dev/null @@ -1,158 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_mul_1 -- Multiply a limb vector with a limb and -; store the result in a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb -56(%r30) - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0n - .code - .export __gmpn_mul_1,entry -__gmpn_mul_1 - .proc - .callinfo frame=128,no_calls - .entry - fldd -56(%r30),%fr5 ; s2limb passed on stack - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t3 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t3 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t2 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,t4,t3 - add,dc t2,hi,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - extrd,u cylimb,31,32,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64/rshift.s b/rts/gmp/mpn/pa64/rshift.s deleted file mode 100644 index f0730e2..0000000 --- a/rts/gmp/mpn/pa64/rshift.s +++ /dev/null @@ -1,100 +0,0 @@ -; HP-PA 2.0 __gmpn_rshift -- - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; size gr24 -; cnt gr23 - -; This runs at 1.5 cycles/limb on PA8000. - - .level 2.0n - .code - .export __gmpn_rshift,entry -__gmpn_rshift - .proc - .callinfo frame=0,args_saved - .entry - - mtsar %r23 - ldd 0(%r25),%r21 - addib,= -1,%r24,L$end - shrpd %r21,%r0,%sar,%r29 ; compute carry out limb - depw,z %r24,31,3,%r28 ; r28 = (size & 7) - sub %r0,%r24,%r22 - depw,z %r22,28,3,%r22 ; r22 = 8 * (-size & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - blr %r28,%r0 ; branch into jump table - sub %r26,%r22,%r26 ; offset res_ptr - 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 - -L$loop -L$0 ldd 8(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,0(%r26) -L$7 ldd 16(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,8(%r26) -L$6 ldd 24(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,16(%r26) -L$5 ldd 32(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,24(%r26) -L$4 ldd 40(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,32(%r26) -L$3 ldd 48(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,40(%r26) -L$2 ldd 56(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,48(%r26) -L$1 ldd 64(%r25),%r21 - ldo 64(%r25),%r25 - shrpd %r21,%r20,%sar,%r20 - std %r20,56(%r26) - addib,> -8,%r24,L$loop - ldo 64(%r26),%r26 - -L$end shrpd %r0,%r21,%sar,%r21 - std %r21,0(%r26) - bve (%r2) - .exit - extrd,u %r29,31,32,%r28 - .procend diff --git a/rts/gmp/mpn/pa64/sub_n.s b/rts/gmp/mpn/pa64/sub_n.s deleted file mode 100644 index dda1f54..0000000 --- a/rts/gmp/mpn/pa64/sub_n.s +++ /dev/null @@ -1,90 +0,0 @@ -; HP-PA 2.0 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 -; and store difference in a third limb vector. - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .level 2.0n - .code - .export __gmpn_sub_n,entry -__gmpn_sub_n - .proc - .callinfo frame=0,args_saved - .entry - - sub %r0,%r23,%r22 - depw,z %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - depw,z %r22,28,3,%r22 ; r22 = 8 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - blr %r28,%r0 ; branch into loop - sub %r26,%r22,%r26 ; offset res_ptr and set carry - -L$loop ldd 0(%r25),%r20 - ldd 0(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,0(%r26) -L$7 ldd 8(%r25),%r21 - ldd 8(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,8(%r26) -L$6 ldd 16(%r25),%r20 - ldd 16(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,16(%r26) -L$5 ldd 24(%r25),%r21 - ldd 24(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,24(%r26) -L$4 ldd 32(%r25),%r20 - ldd 32(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,32(%r26) -L$3 ldd 40(%r25),%r21 - ldd 40(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,40(%r26) -L$2 ldd 48(%r25),%r20 - ldd 48(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,48(%r26) -L$1 ldd 56(%r25),%r21 - ldo 64(%r25),%r25 - ldd 56(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,56(%r26) - ldo 64(%r24),%r24 - addib,> -8,%r23,L$loop - ldo 64(%r26),%r26 - - add,dc %r0,%r0,%r29 - subi 1,%r29,%r29 - bve (%r2) - .exit - ldi 0,%r28 - .procend diff --git a/rts/gmp/mpn/pa64/submul_1.S b/rts/gmp/mpn/pa64/submul_1.S deleted file mode 100644 index 27666b9..0000000 --- a/rts/gmp/mpn/pa64/submul_1.S +++ /dev/null @@ -1,170 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_submul_1 -- Multiply a limb vector with a limb and -; subtract the result from a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb -56(%r30) - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0n - .code - .export __gmpn_submul_1,entry -__gmpn_submul_1 - .proc - .callinfo frame=128,no_calls - .entry - fldd -56(%r30),%fr5 ; s2limb passed on stack - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t4 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - sub rlimb,t4,t3 - add t4,t3,%r0 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t4 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - sub rlimb,t4,t3 - add t4,t3,%r0 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,t4,t4 - add,dc t2,hi,cylimb - sub rlimb,t4,t3 - add t4,t3,%r0 - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - extrd,u cylimb,31,32,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64/udiv_qrnnd.c b/rts/gmp/mpn/pa64/udiv_qrnnd.c deleted file mode 100644 index 1c9fe08..0000000 --- a/rts/gmp/mpn/pa64/udiv_qrnnd.c +++ /dev/null @@ -1,111 +0,0 @@ -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#define TWO64 18446744073709551616.0 - -mp_limb_t -#if __STDC__ -__MPN(udiv_qrnnd) (mp_limb_t n1, mp_limb_t n0, mp_limb_t d, mp_limb_t *r) -#else -__MPN(udiv_qrnnd) (n1, n0, d, r) - mp_limb_t n1; - mp_limb_t n0; - mp_limb_t d; - mp_limb_t *r; -#endif -{ - mp_limb_t q1, q2, q; - mp_limb_t p1, p0; - double di, dq; - - di = 1.0 / d; - - /* Generate upper 53 bits of quotient. Be careful here; the `double' - quotient may be rounded to 2^64 which we cannot safely convert back - to a 64-bit integer. */ - dq = (TWO64 * (double) n1 + (double) n0) * di; - if (dq >= TWO64) - q1 = 0xfffffffffffff800LL; - else - q1 = (mp_limb_t) dq; - - /* Multiply back in order to compare the product to the dividend. */ - umul_ppmm (p1, p0, q1, d); - - /* Was the 53-bit quotient greater that our sought quotient? Test the - sign of the partial remainder to find out. */ - if (n1 < p1 || (n1 == p1 && n0 < p0)) - { - /* 53-bit quotient too large. Partial remainder is negative. - Compute the absolute value of the remainder in n1,,n0. */ - n1 = p1 - (n1 + (p0 < n0)); - n0 = p0 - n0; - - /* Now use the partial remainder as new dividend to compute more bits of - quotient. This is an adjustment for the one we got previously. */ - q2 = (mp_limb_t) ((TWO64 * (double) n1 + (double) n0) * di); - umul_ppmm (p1, p0, q2, d); - - q = q1 - q2; - if (n1 < p1 || (n1 == p1 && n0 <= p0)) - { - n0 = p0 - n0; - } - else - { - n0 = p0 - n0; - n0 += d; - q--; - } - } - else - { - n1 = n1 - (p1 + (n0 < p0)); - n0 = n0 - p0; - - q2 = (mp_limb_t) ((TWO64 * (double) n1 + (double) n0) * di); - umul_ppmm (p1, p0, q2, d); - - q = q1 + q2; - if (n1 < p1 || (n1 == p1 && n0 < p0)) - { - n0 = n0 - p0; - n0 += d; - q--; - } - else - { - n0 = n0 - p0; - if (n0 >= d) - { - n0 -= d; - q++; - } - } - } - - *r = n0; - return q; -} diff --git a/rts/gmp/mpn/pa64/umul_ppmm.S b/rts/gmp/mpn/pa64/umul_ppmm.S deleted file mode 100644 index ceff2d7..0000000 --- a/rts/gmp/mpn/pa64/umul_ppmm.S +++ /dev/null @@ -1,74 +0,0 @@ -; Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -#define p0 %r28 -#define p1 %r29 -#define t32 %r19 -#define t0 %r20 -#define t1 %r21 -#define x %r22 -#define m0 %r23 -#define m1 %r24 - .level 2.0n - .code - .export __gmpn_umul_ppmm,entry -__gmpn_umul_ppmm - .proc - .callinfo frame=128,no_calls - .entry - ldo 128(%r30),%r30 - 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 ; t32 = 2^32 - - ldd -128(%r30),p0 ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),p1 ; hi = high 64 bit of product - - add,l,*nuv m0,m1,x ; x = m1+m0 - add,l t32,p1,p1 ; propagate carry to mid of p1 - depd,z x,31,32,t0 ; lo32(m1+m0) - add t0,p0,p0 - extrd,u x,31,32,t1 ; hi32(m1+m0) - add,dc t1,p1,p1 - - std p0,0(%r31) ; store low half of product - extrd,u p1,31,32,%r28 ; return high half of product - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64w/README b/rts/gmp/mpn/pa64w/README deleted file mode 100644 index cf590a7..0000000 --- a/rts/gmp/mpn/pa64w/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains mpn functions for 64-bit PA-RISC 2.0 -using 64-bit pointers (2.0W). diff --git a/rts/gmp/mpn/pa64w/add_n.s b/rts/gmp/mpn/pa64w/add_n.s deleted file mode 100644 index 1bb9e8f..0000000 --- a/rts/gmp/mpn/pa64w/add_n.s +++ /dev/null @@ -1,90 +0,0 @@ -; HP-PA 2.0 __gmpn_add_n -- Add two limb vectors of the same length > 0 and -; store sum in a third limb vector. - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .level 2.0w - .code - .export __gmpn_add_n,entry -__gmpn_add_n - .proc - .callinfo frame=0,args_saved - .entry - - sub %r0,%r23,%r22 - depw,z %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - depw,z %r22,28,3,%r22 ; r22 = 8 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - sub %r26,%r22,%r26 ; offset res_ptr - blr %r28,%r0 ; branch into loop - add %r0,%r0,%r0 ; reset carry - -L$loop ldd 0(%r25),%r20 - ldd 0(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,0(%r26) -L$7 ldd 8(%r25),%r21 - ldd 8(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,8(%r26) -L$6 ldd 16(%r25),%r20 - ldd 16(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,16(%r26) -L$5 ldd 24(%r25),%r21 - ldd 24(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,24(%r26) -L$4 ldd 32(%r25),%r20 - ldd 32(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,32(%r26) -L$3 ldd 40(%r25),%r21 - ldd 40(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,40(%r26) -L$2 ldd 48(%r25),%r20 - ldd 48(%r24),%r31 - add,dc %r20,%r31,%r20 - std %r20,48(%r26) -L$1 ldd 56(%r25),%r21 - ldo 64(%r25),%r25 - ldd 56(%r24),%r19 - add,dc %r21,%r19,%r21 - std %r21,56(%r26) - ldo 64(%r24),%r24 - addib,> -8,%r23,L$loop - ldo 64(%r26),%r26 - - add,dc %r0,%r0,%r29 - bve (%r2) - .exit - copy %r29,%r28 - .procend diff --git a/rts/gmp/mpn/pa64w/addmul_1.S b/rts/gmp/mpn/pa64w/addmul_1.S deleted file mode 100644 index 4799f90..0000000 --- a/rts/gmp/mpn/pa64w/addmul_1.S +++ /dev/null @@ -1,168 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_addmul_1 -- Multiply a limb vector with a limb and -; add the result to a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb %r23 - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0w - .code - .export __gmpn_addmul_1,entry -__gmpn_addmul_1 - .proc - .callinfo frame=128,no_calls - .entry - std s2limb,-56(%r30) - fldd -56(%r30),%fr5 - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,rlimb,rlimb - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - add t4,rlimb,t3 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,rlimb,rlimb - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - add t4,rlimb,t3 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,rlimb,rlimb - add,dc t2,hi,cylimb - add t4,rlimb,t3 - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - copy cylimb,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64w/gmp-mparam.h b/rts/gmp/mpn/pa64w/gmp-mparam.h deleted file mode 100644 index ee5a0a3..0000000 --- a/rts/gmp/mpn/pa64w/gmp-mparam.h +++ /dev/null @@ -1,65 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values were measured on a PA8500 using the system compiler version - A.11.01.02. Presumably the PA8000 and PA8200 have the same timing - characteristic, but GCC might give somewhat different results.. */ -/* Generated by tuneup.c, 2000-07-25. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 18 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 105 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 46 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 83 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 58 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 134 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 56 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 26 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 1 -#endif diff --git a/rts/gmp/mpn/pa64w/lshift.s b/rts/gmp/mpn/pa64w/lshift.s deleted file mode 100644 index 84f925a..0000000 --- a/rts/gmp/mpn/pa64w/lshift.s +++ /dev/null @@ -1,103 +0,0 @@ -; HP-PA 2.0 __gmpn_lshift -- - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; size gr24 -; cnt gr23 - -; This runs at 1.5 cycles/limb on PA8000. - - .level 2.0w - .code - .export __gmpn_lshift,entry -__gmpn_lshift - .proc - .callinfo frame=0,args_saved - .entry - - shladd %r24,3,%r25,%r25 - shladd %r24,3,%r26,%r26 - subi 64,%r23,%r23 - mtsar %r23 - ldd -8(%r25),%r21 - addib,= -1,%r24,L$end - shrpd %r0,%r21,%sar,%r29 ; compute carry out limb - depw,z %r24,31,3,%r28 ; r28 = (size & 7) - sub %r0,%r24,%r22 - depw,z %r22,28,3,%r22 ; r22 = 8 * (-size & 7) - add %r25,%r22,%r25 ; offset s1_ptr - blr %r28,%r0 ; branch into jump table - add %r26,%r22,%r26 ; offset res_ptr - 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 - -L$loop -L$0 ldd -16(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-8(%r26) -L$7 ldd -24(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-16(%r26) -L$6 ldd -32(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-24(%r26) -L$5 ldd -40(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-32(%r26) -L$4 ldd -48(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-40(%r26) -L$3 ldd -56(%r25),%r21 - shrpd %r20,%r21,%sar,%r20 - std %r20,-48(%r26) -L$2 ldd -64(%r25),%r20 - shrpd %r21,%r20,%sar,%r21 - std %r21,-56(%r26) -L$1 ldd -72(%r25),%r21 - ldo -64(%r25),%r25 - shrpd %r20,%r21,%sar,%r20 - std %r20,-64(%r26) - addib,> -8,%r24,L$loop - ldo -64(%r26),%r26 - -L$end shrpd %r21,%r0,%sar,%r21 - std %r21,-8(%r26) - bve (%r2) - .exit - copy %r29,%r28 - .procend diff --git a/rts/gmp/mpn/pa64w/mul_1.S b/rts/gmp/mpn/pa64w/mul_1.S deleted file mode 100644 index 48f13fb..0000000 --- a/rts/gmp/mpn/pa64w/mul_1.S +++ /dev/null @@ -1,159 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_mul_1 -- Multiply a limb vector with a limb and -; store the result in a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb %r23 - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0w - .code - .export __gmpn_mul_1,entry -__gmpn_mul_1 - .proc - .callinfo frame=128,no_calls - .entry - std s2limb,-56(%r30) - fldd -56(%r30),%fr5 - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t3 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t3 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t2 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,t4,t3 - add,dc t2,hi,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - copy cylimb,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64w/rshift.s b/rts/gmp/mpn/pa64w/rshift.s deleted file mode 100644 index 2517cb1..0000000 --- a/rts/gmp/mpn/pa64w/rshift.s +++ /dev/null @@ -1,100 +0,0 @@ -; HP-PA 2.0 __gmpn_rshift -- - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; size gr24 -; cnt gr23 - -; This runs at 1.5 cycles/limb on PA8000. - - .level 2.0w - .code - .export __gmpn_rshift,entry -__gmpn_rshift - .proc - .callinfo frame=0,args_saved - .entry - - mtsar %r23 - ldd 0(%r25),%r21 - addib,= -1,%r24,L$end - shrpd %r21,%r0,%sar,%r29 ; compute carry out limb - depw,z %r24,31,3,%r28 ; r28 = (size & 7) - sub %r0,%r24,%r22 - depw,z %r22,28,3,%r22 ; r22 = 8 * (-size & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - blr %r28,%r0 ; branch into jump table - sub %r26,%r22,%r26 ; offset res_ptr - 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 - -L$loop -L$0 ldd 8(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,0(%r26) -L$7 ldd 16(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,8(%r26) -L$6 ldd 24(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,16(%r26) -L$5 ldd 32(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,24(%r26) -L$4 ldd 40(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,32(%r26) -L$3 ldd 48(%r25),%r21 - shrpd %r21,%r20,%sar,%r20 - std %r20,40(%r26) -L$2 ldd 56(%r25),%r20 - shrpd %r20,%r21,%sar,%r21 - std %r21,48(%r26) -L$1 ldd 64(%r25),%r21 - ldo 64(%r25),%r25 - shrpd %r21,%r20,%sar,%r20 - std %r20,56(%r26) - addib,> -8,%r24,L$loop - ldo 64(%r26),%r26 - -L$end shrpd %r0,%r21,%sar,%r21 - std %r21,0(%r26) - bve (%r2) - .exit - copy %r29,%r28 - .procend diff --git a/rts/gmp/mpn/pa64w/sub_n.s b/rts/gmp/mpn/pa64w/sub_n.s deleted file mode 100644 index ad01e24..0000000 --- a/rts/gmp/mpn/pa64w/sub_n.s +++ /dev/null @@ -1,90 +0,0 @@ -; HP-PA 2.0 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 -; and store difference in a third limb vector. - -; Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - - -; INPUT PARAMETERS -; res_ptr gr26 -; s1_ptr gr25 -; s2_ptr gr24 -; size gr23 - -; This runs at 2 cycles/limb on PA8000. - - .level 2.0w - .code - .export __gmpn_sub_n,entry -__gmpn_sub_n - .proc - .callinfo frame=0,args_saved - .entry - - sub %r0,%r23,%r22 - depw,z %r22,30,3,%r28 ; r28 = 2 * (-n & 7) - depw,z %r22,28,3,%r22 ; r22 = 8 * (-n & 7) - sub %r25,%r22,%r25 ; offset s1_ptr - sub %r24,%r22,%r24 ; offset s2_ptr - blr %r28,%r0 ; branch into loop - sub %r26,%r22,%r26 ; offset res_ptr and set carry - -L$loop ldd 0(%r25),%r20 - ldd 0(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,0(%r26) -L$7 ldd 8(%r25),%r21 - ldd 8(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,8(%r26) -L$6 ldd 16(%r25),%r20 - ldd 16(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,16(%r26) -L$5 ldd 24(%r25),%r21 - ldd 24(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,24(%r26) -L$4 ldd 32(%r25),%r20 - ldd 32(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,32(%r26) -L$3 ldd 40(%r25),%r21 - ldd 40(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,40(%r26) -L$2 ldd 48(%r25),%r20 - ldd 48(%r24),%r31 - sub,db %r20,%r31,%r20 - std %r20,48(%r26) -L$1 ldd 56(%r25),%r21 - ldo 64(%r25),%r25 - ldd 56(%r24),%r19 - sub,db %r21,%r19,%r21 - std %r21,56(%r26) - ldo 64(%r24),%r24 - addib,> -8,%r23,L$loop - ldo 64(%r26),%r26 - - add,dc %r0,%r0,%r29 - subi 1,%r29,%r29 - bve (%r2) - .exit - copy %r29,%r28 - .procend diff --git a/rts/gmp/mpn/pa64w/submul_1.S b/rts/gmp/mpn/pa64w/submul_1.S deleted file mode 100644 index 294f623..0000000 --- a/rts/gmp/mpn/pa64w/submul_1.S +++ /dev/null @@ -1,171 +0,0 @@ -; HP-PA 2.0 64-bit __gmpn_submul_1 -- Multiply a limb vector with a limb and -; subtract the result from a second limb vector. - -; Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -; INPUT PARAMETERS -#define rptr %r26 -#define sptr %r25 -#define size %r24 -#define s2limb %r23 - -; This runs at 11 cycles/limb on a PA8000. It might be possible to make -; it faster, but the PA8000 pipeline is not publically documented and it -; is very complex to reverse engineer - -#define t1 %r19 -#define rlimb %r20 -#define hi %r21 -#define lo %r22 -#define m0 %r28 -#define m1 %r3 -#define cylimb %r29 -#define t3 %r4 -#define t2 %r6 -#define t5 %r23 -#define t4 %r31 - .level 2.0w - .code - .export __gmpn_submul_1,entry -__gmpn_submul_1 - .proc - .callinfo frame=128,no_calls - .entry - std s2limb,-56(%r30) - fldd -56(%r30),%fr5 - ldo 128(%r30),%r30 - add %r0,%r0,cylimb ; clear cy and cylimb - - std %r3,-96(%r30) - std %r4,-88(%r30) - std %r5,-80(%r30) - std %r6,-72(%r30) - depdi,z 1,31,1,%r5 - - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - - 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) - ldd -128(%r30),lo ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),hi ; hi = high 64 bit of product - addib,= -1,%r24,L$end1 - nop - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - addib,= -1,%r24,L$end2 - nop -L$loop - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m1 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t4 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - sub rlimb,t4,t3 - add t4,t3,%r0 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - fldd 0(sptr),%fr4 - ldo 8(sptr),sptr - std t3,0(rptr) - addib,<> -1,%r24,L$loop - ldo 8(rptr),rptr -L$end2 - 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) - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - ldd -128(%r30),lo ; lo = low 64 bit of product - add cylimb,t4,t4 - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - add,dc t2,hi,cylimb - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - sub rlimb,t4,t3 - add t4,t3,%r0 - ldd -104(%r30),hi ; hi = high 64 bit of product - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr -L$end1 - ldd 0(rptr),rlimb - extrd,u lo,31,32,t1 ; t1 = hi32(lo) - extrd,u lo,63,32,t4 ; t4 = lo32(lo) - add,l m0,t1,t1 ; t1 += m0 - add,l,*nuv m1,t1,t1 ; t1 += m0 - add,l %r5,hi,hi ; propagate carry - extrd,u t1,31,32,t2 ; t2 = hi32(t1) - depd,z t1,31,32,t5 ; t5 = lo32(t1) - add,l t5,t4,t4 ; t4 += lo32(t1) - add cylimb,t4,t4 - add,dc t2,hi,cylimb - sub rlimb,t4,t3 - add t4,t3,%r0 - add,dc %r0,cylimb,cylimb - std t3,0(rptr) - ldo 8(rptr),rptr - - ldd -96(%r30),%r3 - ldd -88(%r30),%r4 - ldd -80(%r30),%r5 - ldd -72(%r30),%r6 - - copy cylimb,%r28 - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/pa64w/udiv_qrnnd.c b/rts/gmp/mpn/pa64w/udiv_qrnnd.c deleted file mode 100644 index 1852913..0000000 --- a/rts/gmp/mpn/pa64w/udiv_qrnnd.c +++ /dev/null @@ -1,117 +0,0 @@ -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#define TWO64 18446744073709551616.0 -#define TWO63 9223372036854775808.0 - -mp_limb_t -#if __STDC__ -__MPN(udiv_qrnnd) (mp_limb_t n1, mp_limb_t n0, mp_limb_t d, mp_limb_t *r) -#else -__MPN(udiv_qrnnd) (n1, n0, d, r) - mp_limb_t n1; - mp_limb_t n0; - mp_limb_t d; - mp_limb_t *r; -#endif -{ - mp_limb_t q1, q2, q; - mp_limb_t p1, p0; - double di, dq; - - di = 1.0 / d; - - /* Generate upper 53 bits of quotient. Be careful here; the `double' - quotient may be rounded to 2^64 which we cannot safely convert back - to a 64-bit integer. */ - dq = (TWO64 * (double) n1 + (double) n0) * di; - if (dq >= TWO64) - q1 = 0xfffffffffffff800L; -#ifndef __GNUC__ - /* Work around HP compiler bug. */ - else if (dq > TWO63) - q1 = (mp_limb_t) (dq - TWO63) + 0x8000000000000000L; -#endif - else - q1 = (mp_limb_t) dq; - - /* Multiply back in order to compare the product to the dividend. */ - umul_ppmm (p1, p0, q1, d); - - /* Was the 53-bit quotient greater that our sought quotient? Test the - sign of the partial remainder to find out. */ - if (n1 < p1 || (n1 == p1 && n0 < p0)) - { - /* 53-bit quotient too large. Partial remainder is negative. - Compute the absolute value of the remainder in n1,,n0. */ - n1 = p1 - (n1 + (p0 < n0)); - n0 = p0 - n0; - - /* Now use the partial remainder as new dividend to compute more bits of - quotient. This is an adjustment for the one we got previously. */ - q2 = (mp_limb_t) ((TWO64 * (double) n1 + (double) n0) * di); - umul_ppmm (p1, p0, q2, d); - - q = q1 - q2; - if (n1 < p1 || (n1 == p1 && n0 <= p0)) - { - n0 = p0 - n0; - } - else - { - n0 = p0 - n0; - n0 += d; - q--; - } - } - else - { - n1 = n1 - (p1 + (n0 < p0)); - n0 = n0 - p0; - - q2 = (mp_limb_t) ((TWO64 * (double) n1 + (double) n0) * di); - umul_ppmm (p1, p0, q2, d); - - q = q1 + q2; - if (n1 < p1 || (n1 == p1 && n0 < p0)) - { - n0 = n0 - p0; - n0 += d; - q--; - } - else - { - n0 = n0 - p0; - if (n0 >= d) - { - n0 -= d; - q++; - } - } - } - - *r = n0; - return q; -} diff --git a/rts/gmp/mpn/pa64w/umul_ppmm.S b/rts/gmp/mpn/pa64w/umul_ppmm.S deleted file mode 100644 index d9fb92b..0000000 --- a/rts/gmp/mpn/pa64w/umul_ppmm.S +++ /dev/null @@ -1,72 +0,0 @@ -; Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -; the Free Software Foundation; either version 2.1 of the License, or (at your -; option) any later version. - -; The GNU MP Library is distributed in the hope that it will be useful, but -; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -; License for more details. - -; You should have received a copy of the GNU Lesser General Public License -; along with the GNU MP Library; see the file COPYING.LIB. If not, write to -; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -; MA 02111-1307, USA. - -#define p0 %r28 -#define p1 %r29 -#define t32 %r19 -#define t0 %r20 -#define t1 %r21 -#define x %r22 -#define m0 %r23 -#define m1 %r24 - .level 2.0w - .code - .export __gmpn_umul_ppmm,entry -__gmpn_umul_ppmm - .proc - .callinfo frame=128,no_calls - .entry - ldo 128(%r30),%r30 - std %r26,-64(%r30) - std %r25,-56(%r30) - - copy %r24,%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 ; t32 = 2^32 - - ldd -128(%r30),p0 ; lo = low 64 bit of product - ldd -120(%r30),m0 ; m0 = mid0 64 bit of product - ldd -112(%r30),m1 ; m1 = mid1 64 bit of product - ldd -104(%r30),p1 ; hi = high 64 bit of product - - add,l,*nuv m0,m1,x ; x = m1+m0 - add,l t32,p1,p1 ; propagate carry to mid of p1 - depd,z x,31,32,t0 ; lo32(m1+m0) - add t0,p0,p0 - extrd,u x,31,32,t1 ; hi32(m1+m0) - add,dc t1,p1,p1 - - std p0,0(%r31) ; store low half of product - copy p1,%r28 ; return high half of product - bve (%r2) - .exit - ldo -128(%r30),%r30 - .procend diff --git a/rts/gmp/mpn/power/add_n.s b/rts/gmp/mpn/power/add_n.s deleted file mode 100644 index 0f9f48f..0000000 --- a/rts/gmp/mpn/power/add_n.s +++ /dev/null @@ -1,79 +0,0 @@ -# IBM POWER __gmpn_add_n -- Add two limb vectors of equal, non-zero length. - -# Copyright (C) 1992, 1994, 1995, 1996, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 - - .toc - .globl __gmpn_add_n - .globl .__gmpn_add_n - .csect __gmpn_add_n[DS] -__gmpn_add_n: - .long .__gmpn_add_n, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_add_n: - andil. 10,6,1 # odd or even number of limbs? - l 8,0(4) # load least significant s1 limb - l 0,0(5) # load least significant s2 limb - cal 3,-4(3) # offset res_ptr, it's updated before it's used - sri 10,6,1 # count for unrolled loop - a 7,0,8 # add least significant limbs, set cy - mtctr 10 # copy count into CTR - beq 0,Leven # branch if even # of limbs (# of limbs >= 2) - -# We have an odd # of limbs. Add the first limbs separately. - cmpi 1,10,0 # is count for unrolled loop zero? - bc 4,6,L1 # bne cr1,L1 (misassembled by gas) - st 7,4(3) - aze 3,10 # use the fact that r10 is zero... - br # return - -# We added least significant limbs. Now reload the next limbs to enter loop. -L1: lu 8,4(4) # load s1 limb and update s1_ptr - lu 0,4(5) # load s2 limb and update s2_ptr - stu 7,4(3) - ae 7,0,8 # add limbs, set cy -Leven: lu 9,4(4) # load s1 limb and update s1_ptr - lu 10,4(5) # load s2 limb and update s2_ptr - bdz Lend # If done, skip loop - -Loop: lu 8,4(4) # load s1 limb and update s1_ptr - lu 0,4(5) # load s2 limb and update s2_ptr - ae 11,9,10 # add previous limbs with cy, set cy - stu 7,4(3) # - lu 9,4(4) # load s1 limb and update s1_ptr - lu 10,4(5) # load s2 limb and update s2_ptr - ae 7,0,8 # add previous limbs with cy, set cy - stu 11,4(3) # - bdn Loop # decrement CTR and loop back - -Lend: ae 11,9,10 # add limbs with cy, set cy - st 7,4(3) # - st 11,8(3) # - lil 3,0 # load cy into ... - aze 3,3 # ... return value register - br diff --git a/rts/gmp/mpn/power/addmul_1.s b/rts/gmp/mpn/power/addmul_1.s deleted file mode 100644 index 8ecc651..0000000 --- a/rts/gmp/mpn/power/addmul_1.s +++ /dev/null @@ -1,122 +0,0 @@ -# IBM POWER __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 1992, 1994, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -# The POWER architecture has no unsigned 32x32->64 bit multiplication -# instruction. To obtain that operation, we have to use the 32x32->64 signed -# multiplication instruction, and add the appropriate compensation to the high -# limb of the result. We add the multiplicand if the multiplier has its most -# significant bit set, and we add the multiplier if the multiplicand has its -# most significant bit set. We need to preserve the carry flag between each -# iteration, so we have to compute the compensation carefully (the natural, -# srai+and doesn't work). Since the POWER architecture has a branch unit we -# can branch in zero cycles, so that's how we perform the additions. - - .toc - .globl __gmpn_addmul_1 - .globl .__gmpn_addmul_1 - .csect __gmpn_addmul_1[DS] -__gmpn_addmul_1: - .long .__gmpn_addmul_1, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_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 # 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 # low limb + old_cy_limb + old cy - l 7,4(3) - aze 10,10 # propagate cy to new cy_limb - a 8,8,7 # add res_limb - bge Lp0 - cax 10,10,6 # 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 # 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 # propagate cy to new cy_limb - a 8,8,7 # add res_limb - bge Ln0 - cax 10,10,6 # 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 # propagate cy to new cy_limb - a 8,8,7 # add res_limb - bge Ln1 - cax 9,9,6 # 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 diff --git a/rts/gmp/mpn/power/lshift.s b/rts/gmp/mpn/power/lshift.s deleted file mode 100644 index ab71fb7..0000000 --- a/rts/gmp/mpn/power/lshift.s +++ /dev/null @@ -1,56 +0,0 @@ -# IBM POWER __gmpn_lshift -- - -# Copyright (C) 1992, 1994, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s_ptr r4 -# size r5 -# cnt r6 - - .toc - .globl __gmpn_lshift - .globl .__gmpn_lshift - .csect __gmpn_lshift[DS] -__gmpn_lshift: - .long .__gmpn_lshift, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_lshift: - sli 0,5,2 - cax 9,3,0 - cax 4,4,0 - sfi 8,6,32 - mtctr 5 # put limb count in CTR loop register - lu 0,-4(4) # read most significant limb - sre 3,0,8 # compute carry out limb, and init MQ register - bdz Lend2 # if just one limb, skip loop - lu 0,-4(4) # read 2:nd most significant limb - sreq 7,0,8 # compute most significant limb of result - bdz Lend # if just two limb, skip loop -Loop: lu 0,-4(4) # load next lower limb - stu 7,-4(9) # store previous result during read latency - sreq 7,0,8 # compute result limb - bdn Loop # loop back until CTR is zero -Lend: stu 7,-4(9) # store 2:nd least significant limb -Lend2: sle 7,0,6 # compute least significant limb - st 7,-4(9) # store it" \ - br diff --git a/rts/gmp/mpn/power/mul_1.s b/rts/gmp/mpn/power/mul_1.s deleted file mode 100644 index 4e08ade..0000000 --- a/rts/gmp/mpn/power/mul_1.s +++ /dev/null @@ -1,109 +0,0 @@ -# IBM POWER __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 1992, 1994, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -# The POWER architecture has no unsigned 32x32->64 bit multiplication -# instruction. To obtain that operation, we have to use the 32x32->64 signed -# multiplication instruction, and add the appropriate compensation to the high -# limb of the result. We add the multiplicand if the multiplier has its most -# significant bit set, and we add the multiplier if the multiplicand has its -# most significant bit set. We need to preserve the carry flag between each -# iteration, so we have to compute the compensation carefully (the natural, -# srai+and doesn't work). Since the POWER architecture has a branch unit we -# can branch in zero cycles, so that's how we perform the additions. - - .toc - .globl __gmpn_mul_1 - .globl .__gmpn_mul_1 - .csect __gmpn_mul_1[DS] -__gmpn_mul_1: - .long .__gmpn_mul_1, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_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 # 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 # 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 # 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 # adjust high limb for negative s2_limb - mfmq 0 - ae 8,0,9 - bge Ln0 - cax 10,10,6 # 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 # adjust high limb for negative s2_limb - mfmq 0 - ae 8,0,10 - bge Ln1 - cax 9,9,6 # 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 diff --git a/rts/gmp/mpn/power/rshift.s b/rts/gmp/mpn/power/rshift.s deleted file mode 100644 index 65b3945..0000000 --- a/rts/gmp/mpn/power/rshift.s +++ /dev/null @@ -1,54 +0,0 @@ -# IBM POWER __gmpn_rshift -- - -# Copyright (C) 1992, 1994, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s_ptr r4 -# size r5 -# cnt r6 - - .toc - .globl __gmpn_rshift - .globl .__gmpn_rshift - .csect __gmpn_rshift[DS] -__gmpn_rshift: - .long .__gmpn_rshift, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_rshift: - sfi 8,6,32 - mtctr 5 # put limb count in CTR loop register - l 0,0(4) # read least significant limb - ai 9,3,-4 # adjust res_ptr since it's offset in the stu:s - sle 3,0,8 # compute carry limb, and init MQ register - bdz Lend2 # if just one limb, skip loop - lu 0,4(4) # read 2:nd least significant limb - sleq 7,0,8 # compute least significant limb of result - bdz Lend # if just two limb, skip loop -Loop: lu 0,4(4) # load next higher limb - stu 7,4(9) # store previous result during read latency - sleq 7,0,8 # compute result limb - bdn Loop # loop back until CTR is zero -Lend: stu 7,4(9) # store 2:nd most significant limb -Lend2: sre 7,0,6 # compute most significant limb - st 7,4(9) # store it" \ - br diff --git a/rts/gmp/mpn/power/sdiv.s b/rts/gmp/mpn/power/sdiv.s deleted file mode 100644 index 81da622..0000000 --- a/rts/gmp/mpn/power/sdiv.s +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - .toc - .globl __sdiv_qrnnd - .globl .__sdiv_qrnnd - .csect __sdiv_qrnnd[DS] -__sdiv_qrnnd: - .long .__sdiv_qrnnd, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__sdiv_qrnnd: - mtmq 5 - div 0,4,6 - mfmq 9 - st 9,0(3) - mr 3,0 - br diff --git a/rts/gmp/mpn/power/sub_n.s b/rts/gmp/mpn/power/sub_n.s deleted file mode 100644 index aa09cf5..0000000 --- a/rts/gmp/mpn/power/sub_n.s +++ /dev/null @@ -1,80 +0,0 @@ -# IBM POWER __gmpn_sub_n -- Subtract two limb vectors of equal, non-zero length. - -# Copyright (C) 1992, 1994, 1995, 1996, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 - - .toc - .globl __gmpn_sub_n - .globl .__gmpn_sub_n - .csect __gmpn_sub_n[DS] -__gmpn_sub_n: - .long .__gmpn_sub_n, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_sub_n: - andil. 10,6,1 # odd or even number of limbs? - l 8,0(4) # load least significant s1 limb - l 0,0(5) # load least significant s2 limb - cal 3,-4(3) # offset res_ptr, it's updated before it's used - sri 10,6,1 # count for unrolled loop - sf 7,0,8 # subtract least significant limbs, set cy - mtctr 10 # copy count into CTR - beq 0,Leven # branch if even # of limbs (# of limbs >= 2) - -# We have an odd # of limbs. Add the first limbs separately. - cmpi 1,10,0 # is count for unrolled loop zero? - bc 4,6,L1 # bne cr1,L1 (misassembled by gas) - st 7,4(3) - sfe 3,0,0 # load !cy into ... - sfi 3,3,0 # ... return value register - br # return - -# We added least significant limbs. Now reload the next limbs to enter loop. -L1: lu 8,4(4) # load s1 limb and update s1_ptr - lu 0,4(5) # load s2 limb and update s2_ptr - stu 7,4(3) - sfe 7,0,8 # subtract limbs, set cy -Leven: lu 9,4(4) # load s1 limb and update s1_ptr - lu 10,4(5) # load s2 limb and update s2_ptr - bdz Lend # If done, skip loop - -Loop: lu 8,4(4) # load s1 limb and update s1_ptr - lu 0,4(5) # load s2 limb and update s2_ptr - sfe 11,10,9 # subtract previous limbs with cy, set cy - stu 7,4(3) # - lu 9,4(4) # load s1 limb and update s1_ptr - lu 10,4(5) # load s2 limb and update s2_ptr - sfe 7,0,8 # subtract previous limbs with cy, set cy - stu 11,4(3) # - bdn Loop # decrement CTR and loop back - -Lend: sfe 11,10,9 # subtract limbs with cy, set cy - st 7,4(3) # - st 11,8(3) # - sfe 3,0,0 # load !cy into ... - sfi 3,3,0 # ... return value register - br diff --git a/rts/gmp/mpn/power/submul_1.s b/rts/gmp/mpn/power/submul_1.s deleted file mode 100644 index bc01b7c..0000000 --- a/rts/gmp/mpn/power/submul_1.s +++ /dev/null @@ -1,127 +0,0 @@ -# IBM POWER __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract -# the result from a second limb vector. - -# Copyright (C) 1992, 1994, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -# The POWER architecture has no unsigned 32x32->64 bit multiplication -# instruction. To obtain that operation, we have to use the 32x32->64 signed -# multiplication instruction, and add the appropriate compensation to the high -# limb of the result. We add the multiplicand if the multiplier has its most -# significant bit set, and we add the multiplier if the multiplicand has its -# most significant bit set. We need to preserve the carry flag between each -# iteration, so we have to compute the compensation carefully (the natural, -# srai+and doesn't work). Since the POWER architecture has a branch unit we -# can branch in zero cycles, so that's how we perform the additions. - - .toc - .globl __gmpn_submul_1 - .globl .__gmpn_submul_1 - .csect __gmpn_submul_1[DS] -__gmpn_submul_1: - .long .__gmpn_submul_1, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__gmpn_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 # add res_limb - a 11,8,11 # 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 # low limb + old_cy_limb + old cy - l 7,4(3) - aze 10,10 # propagate cy to new cy_limb - sf 8,11,7 # add res_limb - a 11,8,11 # invert cy (r11 is junk) - bge Lp0 - cax 10,10,6 # 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 # invert cy (r11 is junk) - bge Lp1 - cax 9,9,6 # 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 # propagate cy to new cy_limb - sf 8,11,7 # add res_limb - a 11,8,11 # invert cy (r11 is junk) - bge Ln0 - cax 10,10,6 # 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 # propagate cy to new cy_limb - sf 8,11,7 # add res_limb - a 11,8,11 # invert cy (r11 is junk) - bge Ln1 - cax 9,9,6 # 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 diff --git a/rts/gmp/mpn/power/umul.s b/rts/gmp/mpn/power/umul.s deleted file mode 100644 index 8c77496..0000000 --- a/rts/gmp/mpn/power/umul.s +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - .toc - .globl __umul_ppmm - .globl .__umul_ppmm - .csect __umul_ppmm[DS] -__umul_ppmm: - .long .__umul_ppmm, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.__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 diff --git a/rts/gmp/mpn/powerpc32/add_n.asm b/rts/gmp/mpn/powerpc32/add_n.asm deleted file mode 100644 index 81ed04b..0000000 --- a/rts/gmp/mpn/powerpc32/add_n.asm +++ /dev/null @@ -1,61 +0,0 @@ -dnl PowerPC-32 mpn_add_n -- Add two limb vectors of the same length > 0 and -dnl store sum in a third limb vector. - -dnl Copyright (C) 1995, 1997, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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) - mtctr r6 C copy size into CTR - addic r0,r0,0 C clear cy - lwz r8,0(r4) C load least significant s1 limb - lwz r0,0(r5) C load least significant s2 limb - addi r3,r3,-4 C offset res_ptr, it's updated before it's used - bdz .Lend C If done, skip loop -.Loop: lwz r9,4(r4) C load s1 limb - lwz r10,4(r5) C load s2 limb - adde r7,r0,r8 C add limbs with cy, set cy - stw r7,4(r3) C store result limb - bdz .Lexit C decrement CTR and exit if done - lwzu r8,8(r4) C load s1 limb and update s1_ptr - lwzu r0,8(r5) C load s2 limb and update s2_ptr - adde r7,r10,r9 C add limbs with cy, set cy - stwu r7,8(r3) C store result limb and update res_ptr - bdnz .Loop C decrement CTR and loop back - -.Lend: adde r7,r0,r8 - stw r7,4(r3) C store ultimate result limb - li r3,0 C load cy into ... - addze r3,r3 C ... return value register - blr -.Lexit: adde r7,r10,r9 - stw r7,8(r3) - li r3,0 C load cy into ... - addze r3,r3 C ... return value register - blr -EPILOGUE(mpn_add_n) diff --git a/rts/gmp/mpn/powerpc32/addmul_1.asm b/rts/gmp/mpn/powerpc32/addmul_1.asm deleted file mode 100644 index 3ef75b1..0000000 --- a/rts/gmp/mpn/powerpc32/addmul_1.asm +++ /dev/null @@ -1,124 +0,0 @@ -dnl PowerPC-32 mpn_addmul_1 -- Multiply a limb vector with a limb and add -dnl the result to a second limb vector. - -dnl Copyright (C) 1995, 1997, 1998, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl This is optimized for the PPC604. It has not been tested on PPC601, PPC603 -dnl or PPC750 since I don't have access to any such machines. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_addmul_1) - cmpi cr0,r5,9 C more than 9 limbs? - bgt cr0,.Lbig 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 .Lend -.Lloop: - 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 .Lloop -.Lend: stw r8,4(r3) - addze r3,r10 - blr - -.Lbig: stmw r30,-32(r1) - addi r5,r5,-1 - srwi r0,r5,2 - 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) - -.LloopU: - 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 .LloopU - - andi. r31,r5,3 - mtctr r31 - beq cr0,.Lendx - -.LloopE: - 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 .LloopE -.Lendx: - addze r3,r0 - lmw r30,-32(r1) - blr -EPILOGUE(mpn_addmul_1) diff --git a/rts/gmp/mpn/powerpc32/aix.m4 b/rts/gmp/mpn/powerpc32/aix.m4 deleted file mode 100644 index 2bd8425..0000000 --- a/rts/gmp/mpn/powerpc32/aix.m4 +++ /dev/null @@ -1,39 +0,0 @@ -divert(-1) -dnl m4 macros for AIX 32-bit assembly. - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - -define(`ASM_START', - `.toc') - -define(`PROLOGUE', - ` - .globl $1 - .globl .$1 - .csect $1[DS],2 -$1: - .long .$1, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.$1:') - -define(`EPILOGUE', `') - -divert diff --git a/rts/gmp/mpn/powerpc32/gmp-mparam.h b/rts/gmp/mpn/powerpc32/gmp-mparam.h deleted file mode 100644 index b283185..0000000 --- a/rts/gmp/mpn/powerpc32/gmp-mparam.h +++ /dev/null @@ -1,66 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* These values are for the 604. Presumably, these should be considerably - different for the 603 and 750 that have much slower multiply - instructions. */ - -/* Generated by tuneup.c, 2000-05-26. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 26 /* tuneup says 20 */ -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 228 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 46 /* tuneup says 44 */ -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 262 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 52 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 86 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 23 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 7 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 53 -#endif diff --git a/rts/gmp/mpn/powerpc32/lshift.asm b/rts/gmp/mpn/powerpc32/lshift.asm deleted file mode 100644 index 73a8543..0000000 --- a/rts/gmp/mpn/powerpc32/lshift.asm +++ /dev/null @@ -1,145 +0,0 @@ -dnl PowerPC-32 mpn_lshift -- Shift a number left. - -dnl Copyright (C) 1995, 1998, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_lshift) - cmpi cr0,r5,12 C more than 12 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 .LBIG 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 .Lend1 - -.Loop: lwzu r10,-4(r4) - slw r9,r11,r6 - srw r12,r10,r8 - or r9,r9,r12 - stwu r9,-4(r7) - bdz .Lend2 - lwzu r11,-4(r4) - slw r9,r10,r6 - srw r12,r11,r8 - or r9,r9,r12 - stwu r9,-4(r7) - bdnz .Loop - -.Lend1: slw r0,r11,r6 - stw r0,-4(r7) - blr -.Lend2: slw r0,r10,r6 - stw r0,-4(r7) - blr - -.LBIG: - stmw r24,-32(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 .Le - mtctr r10 - lwzu r28,-4(r4) - bdz .Lxe0 - -.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 .Loop0 C taken at most once! - -.Lxe0: slw r12,r28,r6 - srw r24,r28,r8 - or r24,r0,r24 - stwu r24,-4(r7) - mr r0,r12 - -.Le: 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) - -.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 .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 - stwu r27,-16(r7) - mr r0,r12 - - stw r0,-4(r7) - lmw r24,-32(r1) C restore registers - blr -EPILOGUE(mpn_lshift) diff --git a/rts/gmp/mpn/powerpc32/mul_1.asm b/rts/gmp/mpn/powerpc32/mul_1.asm deleted file mode 100644 index ec878b5..0000000 --- a/rts/gmp/mpn/powerpc32/mul_1.asm +++ /dev/null @@ -1,86 +0,0 @@ -dnl PowerPC-32 mpn_mul_1 -- Multiply a limb vector with a limb and store -dnl the result in a second limb vector. - -dnl Copyright (C) 1995, 1997, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl This is optimized for the PPC604 but it runs decently even on PPC601. It -dnl has not been tested on a PPC603 since I don't have access to any such -dnl machines. - -include(`../config.m4') - -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 .Lend3 - stmw r30,-8(r1) C save registers we are supposed to preserve - lwzu r9,4(r4) - mullw r11,r8,r6 - mulhwu r0,r8,r6 - bdz .Lend1 -C Software pipelined main loop -.Loop: lwz r8,4(r4) - mullw r10,r9,r6 - adde r30,r11,r12 - mulhwu r12,r9,r6 - stw r30,4(r3) - bdz .Lend2 - lwzu r9,8(r4) - mullw r11,r8,r6 - adde r31,r10,r0 - mulhwu r0,r8,r6 - stwu r31,8(r3) - bdnz .Loop -C Finish software pipeline -.Lend1: mullw r10,r9,r6 - adde r30,r11,r12 - mulhwu r12,r9,r6 - stw r30,4(r3) - adde r31,r10,r0 - stwu r31,8(r3) - addze r3,r12 - lmw r30,-8(r1) C restore registers from stack - blr -.Lend2: mullw r11,r8,r6 - adde r31,r10,r0 - mulhwu r0,r8,r6 - stwu r31,8(r3) - adde r30,r11,r12 - stw r30,4(r3) - addze r3,r0 - lmw r30,-8(r1) C restore registers from stack - blr -.Lend3: mullw r11,r8,r6 - stw r11,4(r3) - mulhwu r3,r8,r6 - blr -EPILOGUE(mpn_mul_1) diff --git a/rts/gmp/mpn/powerpc32/regmap.m4 b/rts/gmp/mpn/powerpc32/regmap.m4 deleted file mode 100644 index 978f189..0000000 --- a/rts/gmp/mpn/powerpc32/regmap.m4 +++ /dev/null @@ -1,34 +0,0 @@ -divert(-1) - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl Map register names r0, r1, etc, to just `0', `1', etc. -dnl This is needed on all systems but NeXT, Rhapsody, and MacOS-X -forloop(i,0,31, -`define(`r'i,i)' -) - -dnl Likewise for cr0, cr1, etc. -forloop(i,0,7, -`define(`cr'i,i)' -) - -divert diff --git a/rts/gmp/mpn/powerpc32/rshift.asm b/rts/gmp/mpn/powerpc32/rshift.asm deleted file mode 100644 index a09ba04..0000000 --- a/rts/gmp/mpn/powerpc32/rshift.asm +++ /dev/null @@ -1,60 +0,0 @@ -dnl PowerPC-32 mpn_rshift -- Shift a number right. - -dnl Copyright (C) 1995, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_rshift) - mtctr r5 C copy size into CTR - addi r7,r3,-4 C move adjusted res_ptr to free return reg - subfic r8,r6,32 - lwz r11,0(r4) C load first s1 limb - slw r3,r11,r8 C compute function return value - bdz .Lend1 - -.Loop: lwzu r10,4(r4) - srw r9,r11,r6 - slw r12,r10,r8 - or r9,r9,r12 - stwu r9,4(r7) - bdz .Lend2 - lwzu r11,4(r4) - srw r9,r10,r6 - slw r12,r11,r8 - or r9,r9,r12 - stwu r9,4(r7) - bdnz .Loop - -.Lend1: srw r0,r11,r6 - stw r0,4(r7) - blr - -.Lend2: srw r0,r10,r6 - stw r0,4(r7) - blr -EPILOGUE(mpn_rshift) diff --git a/rts/gmp/mpn/powerpc32/sub_n.asm b/rts/gmp/mpn/powerpc32/sub_n.asm deleted file mode 100644 index b04b419..0000000 --- a/rts/gmp/mpn/powerpc32/sub_n.asm +++ /dev/null @@ -1,61 +0,0 @@ -dnl PowerPC-32 mpn_sub_n -- Subtract two limb vectors of the same length > 0 -dnl and store difference in a third limb vector. - -dnl Copyright (C) 1995, 1997, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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) - mtctr r6 C copy size into CTR - addic r0,r6,-1 C set cy - lwz r8,0(r4) C load least significant s1 limb - lwz r0,0(r5) C load least significant s2 limb - addi r3,r3,-4 C offset res_ptr, it's updated before it's used - bdz .Lend C If done, skip loop -.Loop: lwz r9,4(r4) C load s1 limb - lwz r10,4(r5) C load s2 limb - subfe r7,r0,r8 C subtract limbs with cy, set cy - stw r7,4(r3) C store result limb - bdz .Lexit C decrement CTR and exit if done - lwzu r8,8(r4) C load s1 limb and update s1_ptr - lwzu r0,8(r5) C load s2 limb and update s2_ptr - subfe r7,r10,r9 C subtract limbs with cy, set cy - stwu r7,8(r3) C store result limb and update res_ptr - bdnz .Loop C decrement CTR and loop back - -.Lend: subfe r7,r0,r8 - stw r7,4(r3) C store ultimate result limb - subfe r3,r0,r0 C load !cy into ... - subfic r3,r3,0 C ... return value register - blr -.Lexit: subfe r7,r10,r9 - stw r7,8(r3) - subfe r3,r0,r0 C load !cy into ... - subfic r3,r3,0 C ... return value register - blr -EPILOGUE(mpn_sub_n) diff --git a/rts/gmp/mpn/powerpc32/submul_1.asm b/rts/gmp/mpn/powerpc32/submul_1.asm deleted file mode 100644 index a129e9f..0000000 --- a/rts/gmp/mpn/powerpc32/submul_1.asm +++ /dev/null @@ -1,130 +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 (C) 1995, 1997, 1998, 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -dnl INPUT PARAMETERS -dnl res_ptr r3 -dnl s1_ptr r4 -dnl size r5 -dnl s2_limb r6 - -dnl This is optimized for the PPC604. It has not been tested on PPC601, PPC603 -dnl or PPC750 since I don't have access to any such machines. - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_submul_1) - cmpi cr0,r5,9 C more than 9 limbs? - bgt cr0,.Lbig 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 .Lend -.Lloop: - 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 .Lloop -.Lend: stw r8,4(r3) - addze r3,r10 - blr - -.Lbig: stmw r30,-32(r1) - addi r5,r5,-1 - srwi r0,r5,2 - 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) - -.LloopU: - 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 .LloopU - - andi. r31,r5,3 - mtctr r31 - beq cr0,.Lendx - -.LloopE: - 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 .LloopE -.Lendx: - addze r3,r0 - lmw r30,-32(r1) - blr -EPILOGUE(mpn_submul_1) diff --git a/rts/gmp/mpn/powerpc32/umul.asm b/rts/gmp/mpn/powerpc32/umul.asm deleted file mode 100644 index eeaa0a4..0000000 --- a/rts/gmp/mpn/powerpc32/umul.asm +++ /dev/null @@ -1,32 +0,0 @@ -dnl PowerPC-32 umul_ppmm -- support for longlong.h - -dnl Copyright (C) 2000 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 by -dnl the Free Software Foundation; either version 2.1 of the License, or (at your -dnl 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_umul_ppmm) - mullw 0,4,5 - mulhwu 9,4,5 - stw 0,0(3) - mr 3,9 - blr -EPILOGUE(mpn_umul_ppmm) diff --git a/rts/gmp/mpn/powerpc64/README b/rts/gmp/mpn/powerpc64/README deleted file mode 100644 index c779276..0000000 --- a/rts/gmp/mpn/powerpc64/README +++ /dev/null @@ -1,36 +0,0 @@ -PPC630 (aka Power3) pipeline information: - -Decoding is 4-way and issue is 8-way with some out-of-order capability. -LS1 - ld/st unit 1 -LS2 - ld/st unit 2 -FXU1 - integer unit 1, handles any simple integer instructions -FXU2 - integer unit 2, handles any simple integer instructions -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. -Simple integer: 2 operations (such as add, rl*) -Integer multiply: 1 operation every 9th cycle worst case; exact timing depends - on 2nd operand 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, fmadd) - Latency = 4. -Floating-point divide: - ? -Floating-point square root: - ? - -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. diff --git a/rts/gmp/mpn/powerpc64/add_n.asm b/rts/gmp/mpn/powerpc64/add_n.asm deleted file mode 100644 index c332537..0000000 --- a/rts/gmp/mpn/powerpc64/add_n.asm +++ /dev/null @@ -1,61 +0,0 @@ -# PowerPC-64 mpn_add_n -- Add two limb vectors of the same length > 0 and -# store sum in a third limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_add_n) - mtctr r6 # copy size into CTR - addic r0,r0,0 # clear cy - ld r8,0(r4) # load least significant s1 limb - ld r0,0(r5) # load least significant s2 limb - addi r3,r3,-8 # offset res_ptr, it's updated before it's used - bdz .Lend # If done, skip loop -.Loop: ld r9,8(r4) # load s1 limb - ld r10,8(r5) # load s2 limb - adde r7,r0,r8 # add limbs with cy, set cy - std r7,8(r3) # store result limb - bdz .Lexit # decrement CTR and exit if done - ldu r8,16(r4) # load s1 limb and update s1_ptr - ldu r0,16(r5) # load s2 limb and update s2_ptr - adde r7,r10,r9 # add limbs with cy, set cy - stdu r7,16(r3) # store result limb and update res_ptr - bdnz .Loop # decrement CTR and loop back - -.Lend: adde r7,r0,r8 - std r7,8(r3) # store ultimate result limb - li r3,0 # load cy into ... - addze r3,r3 # ... return value register - blr -.Lexit: adde r7,r10,r9 - std r7,16(r3) - li r3,0 # load cy into ... - addze r3,r3 # ... return value register - blr -EPILOGUE(mpn_add_n) diff --git a/rts/gmp/mpn/powerpc64/addmul_1.asm b/rts/gmp/mpn/powerpc64/addmul_1.asm deleted file mode 100644 index 8177448..0000000 --- a/rts/gmp/mpn/powerpc64/addmul_1.asm +++ /dev/null @@ -1,52 +0,0 @@ -# PowerPC-64 mpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_addmul_1) - mtctr 5 - li 9,0 # cy_limb = 0 - addic 0,0,0 - cal 3,-8(3) - cal 4,-8(4) -.Loop: - ldu 0,8(4) - ld 10,8(3) - mulld 7,0,6 - adde 7,7,9 - mulhdu 9,0,6 - addze 9,9 - addc 7,7,10 - stdu 7,8(3) - bdnz .Loop - - addze 3,9 - blr -EPILOGUE(mpn_addmul_1) diff --git a/rts/gmp/mpn/powerpc64/addsub_n.asm b/rts/gmp/mpn/powerpc64/addsub_n.asm deleted file mode 100644 index 4ed40d7..0000000 --- a/rts/gmp/mpn/powerpc64/addsub_n.asm +++ /dev/null @@ -1,107 +0,0 @@ -# PowerPC-64 mpn_addsub_n -- Simultaneous add and sub. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 - -include(`asm-syntax.m4') - -define(SAVE_BORROW_RESTORE_CARRY, - `sldi $1,$1,63 - adde $1,$1,$1') -define(SAVE_CARRY_RESTORE_BORROW, - `sldi $1,$1,63 - adde $1,$1,$1') - -# 19991117 - -# This is just crafted for testing some ideas, and verifying that we can make -# it run fast. It runs at 2.55 cycles/limb on the 630, which is very good. -# We should play a little with the schedule. No time has been spent on that. - -# To finish this, the loop warm up and cool down code needs to be written, -# and the result need to be tested. Also, the proper calling sequence should -# be used. - -# r1p r2p s1p s2p n -# Use reg r0, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12 - -ASM_START() -PROLOGUE(mpn_addsub_n) - std r14,-64(1) - std r15,-56(1) - std r16,-48(1) - std r17,-40(1) - std r18,-32(1) - std r19,-24(1) - - srdi r7,r7,2 - mtctr r7 # copy size into CTR - addic r0,r0,0 # clear cy - addi r3,r3,-8 # offset res_ptr, it's updated before it's used - addi r4,r4,-8 # offset res_ptr, it's updated before it's used - -.Loop: - adde r12,r8,r9 - std r12,8(r3) - adde r12,r10,r11 - std r12,16(r3) - - SAVE_CARRY_RESTORE_BORROW(r0) - - subfe r12,r8,r9 - std r12,8(r4) - ld r8,8(r5) # s1 L 1 - ld r9,8(r6) # s2 L 1 - subfe r12,r10,r11 - std r12,16(r4) - ld r10,16(r5) # s1 L 2 - ld r11,16(r6) # s2 L 2 -# pair ------------------------- - subfe r12,r14,r15 - std r12,24(r4) - subfe r12,r16,r17 - stdu r12,32(r4) - - SAVE_BORROW_RESTORE_CARRY(r0) - - adde r12,r14,r15 - std r12,24(r3) - ld r14,24(r5) # s1 L 3 - ld r15,24(r6) # s2 L 3 - adde r12,r16,r17 - stdu r12,32(r3) - ldu r16,32(r5) # s1 L 4 - ldu r17,32(r6) # s2 L 4 - bdnz .Loop - - ld r14,-64(1) - ld r15,-56(1) - ld r16,-48(1) - ld r17,-40(1) - ld r18,-32(1) - ld r19,-24(1) - blr -EPILOGUE(mpn_addsub_n) diff --git a/rts/gmp/mpn/powerpc64/aix.m4 b/rts/gmp/mpn/powerpc64/aix.m4 deleted file mode 100644 index aee9f1f..0000000 --- a/rts/gmp/mpn/powerpc64/aix.m4 +++ /dev/null @@ -1,40 +0,0 @@ -divert(-1) -dnl m4 macros for AIX 64-bit assembly. - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - -define(`ASM_START', - `.machine "ppc64" - .toc') - -define(`PROLOGUE', - ` - .globl $1 - .globl .$1 - .csect $1[DS],3 -$1: - .llong .$1, TOC[tc0], 0 - .csect .text[PR] - .align 2 -.$1:') - -define(`EPILOGUE', `') - -divert diff --git a/rts/gmp/mpn/powerpc64/copyd.asm b/rts/gmp/mpn/powerpc64/copyd.asm deleted file mode 100644 index d06e8c2..0000000 --- a/rts/gmp/mpn/powerpc64/copyd.asm +++ /dev/null @@ -1,45 +0,0 @@ -# PowerPC-64 mpn_copyd -- Copy a limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# rptr r3 -# sptr r4 -# n r5 - -include(`../config.m4') - -# Unrolling this analogous to sparc64/copyi.s doesn't help for any -# operand sizes. - -ASM_START() -PROLOGUE(mpn_copyd) - cmpdi cr0,r5,0 - mtctr r5 - sldi r5,r5,3 - add r4,r4,r5 - add r3,r3,r5 - beq cr0,.Lend -.Loop: ldu r0,-8(r4) - stdu r0,-8(r3) - bdnz .Loop -.Lend: blr -EPILOGUE(mpn_copyd) diff --git a/rts/gmp/mpn/powerpc64/copyi.asm b/rts/gmp/mpn/powerpc64/copyi.asm deleted file mode 100644 index a1bedc4..0000000 --- a/rts/gmp/mpn/powerpc64/copyi.asm +++ /dev/null @@ -1,44 +0,0 @@ -# PowerPC-64 mpn_copyi -- Copy a limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# rptr r3 -# sptr r4 -# n r5 - -include(`../config.m4') - -# Unrolling this analogous to sparc64/copyi.s doesn't help for any -# operand sizes. - -ASM_START() -PROLOGUE(mpn_copyi) - cmpdi cr0,r5,0 - mtctr r5 - addi r4,r4,-8 - addi r3,r3,-8 - beq cr0,.Lend -.Loop: ldu r0,8(r4) - stdu r0,8(r3) - bdnz .Loop -.Lend: blr -EPILOGUE(mpn_copyi) diff --git a/rts/gmp/mpn/powerpc64/gmp-mparam.h b/rts/gmp/mpn/powerpc64/gmp-mparam.h deleted file mode 100644 index 6fefb96..0000000 --- a/rts/gmp/mpn/powerpc64/gmp-mparam.h +++ /dev/null @@ -1,62 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1995, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* Generated by tuneup.c, 2000-07-16. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 10 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 57 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 16 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 89 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 28 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 216 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 14 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 6 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 163 -#endif diff --git a/rts/gmp/mpn/powerpc64/lshift.asm b/rts/gmp/mpn/powerpc64/lshift.asm deleted file mode 100644 index cef3a81..0000000 --- a/rts/gmp/mpn/powerpc64/lshift.asm +++ /dev/null @@ -1,159 +0,0 @@ -# PowerPC-64 mpn_lshift -- Shift a number left. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_lshift) - cmpdi cr0,r5,20 # more than 20 limbs? - sldi r0,r5,3 - add r4,r4,r0 # make r4 point at end of s1 - add r7,r3,r0 # make r7 point at end of res - bgt .LBIG # branch if more than 12 limbs - - mtctr r5 # copy size into CTR - subfic r8,r6,64 - ldu r11,-8(r4) # load first s1 limb - srd r3,r11,r8 # compute function return value - bdz .Lend1 - -.Loop: ldu r10,-8(r4) - sld r9,r11,r6 - srd r12,r10,r8 - or r9,r9,r12 - stdu r9,-8(r7) - bdz .Lend2 - ldu r11,-8(r4) - sld r9,r10,r6 - srd r12,r11,r8 - or r9,r9,r12 - stdu r9,-8(r7) - bdnz .Loop - -.Lend1: sld r0,r11,r6 - std r0,-8(r7) - blr -.Lend2: sld r0,r10,r6 - std r0,-8(r7) - blr - -.LBIG: - std r24,-64(1) - std r25,-56(1) - std r26,-48(1) - std r27,-40(1) - std r28,-32(1) - std r29,-24(1) - std r30,-16(1) - std r31,-8(1) - ldu r9,-8(r4) - subfic r8,r6,64 - srd r3,r9,r8 # compute function return value - sld r0,r9,r6 - addi r5,r5,-1 - - andi. r10,r5,3 # count for spill loop - beq .Le - mtctr r10 - ldu r28,-8(r4) - bdz .Lxe0 - -.Loop0: sld r12,r28,r6 - srd r24,r28,r8 - ldu r28,-8(r4) - or r24,r0,r24 - stdu r24,-8(r7) - mr r0,r12 - bdnz .Loop0 # taken at most once! - -.Lxe0: sld r12,r28,r6 - srd r24,r28,r8 - or r24,r0,r24 - stdu r24,-8(r7) - mr r0,r12 - -.Le: srdi r5,r5,2 # count for unrolled loop - addi r5,r5,-1 - mtctr r5 - ld r28,-8(r4) - ld r29,-16(r4) - ld r30,-24(r4) - ldu r31,-32(r4) - -.LoopU: sld r9,r28,r6 - srd r24,r28,r8 - ld r28,-8(r4) - sld r10,r29,r6 - srd r25,r29,r8 - ld r29,-16(r4) - sld r11,r30,r6 - srd r26,r30,r8 - ld r30,-24(r4) - sld r12,r31,r6 - srd r27,r31,r8 - ldu r31,-32(r4) - or r24,r0,r24 - std r24,-8(r7) - or r25,r9,r25 - std r25,-16(r7) - or r26,r10,r26 - std r26,-24(r7) - or r27,r11,r27 - stdu r27,-32(r7) - mr r0,r12 - bdnz .LoopU - - sld r9,r28,r6 - srd r24,r28,r8 - sld r10,r29,r6 - srd r25,r29,r8 - sld r11,r30,r6 - srd r26,r30,r8 - sld r12,r31,r6 - srd r27,r31,r8 - or r24,r0,r24 - std r24,-8(r7) - or r25,r9,r25 - std r25,-16(r7) - or r26,r10,r26 - std r26,-24(r7) - or r27,r11,r27 - stdu r27,-32(r7) - mr r0,r12 - - std r0,-8(r7) - ld r24,-64(1) - ld r25,-56(1) - ld r26,-48(1) - ld r27,-40(1) - ld r28,-32(1) - ld r29,-24(1) - ld r30,-16(1) - ld r31,-8(1) - blr -EPILOGUE(mpn_lshift) diff --git a/rts/gmp/mpn/powerpc64/mul_1.asm b/rts/gmp/mpn/powerpc64/mul_1.asm deleted file mode 100644 index 4759728..0000000 --- a/rts/gmp/mpn/powerpc64/mul_1.asm +++ /dev/null @@ -1,49 +0,0 @@ -# PowerPC-64 mpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_mul_1) - mtctr 5 - li 9,0 # cy_limb = 0 - addic 0,0,0 - cal 3,-8(3) - cal 4,-8(4) -.Loop: - ldu 0,8(4) - mulld 7,0,6 - adde 7,7,9 - mulhdu 9,0,6 - stdu 7,8(3) - bdnz .Loop - - addze 3,9 - blr -EPILOGUE(mpn_mul_1) diff --git a/rts/gmp/mpn/powerpc64/rshift.asm b/rts/gmp/mpn/powerpc64/rshift.asm deleted file mode 100644 index 88272c7..0000000 --- a/rts/gmp/mpn/powerpc64/rshift.asm +++ /dev/null @@ -1,60 +0,0 @@ -# PowerPC-64 mpn_rshift -- Shift a number right. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# cnt r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_rshift) - mtctr r5 # copy size into CTR - addi r7,r3,-8 # move adjusted res_ptr to free return reg - subfic r8,r6,64 - ld r11,0(r4) # load first s1 limb - sld r3,r11,r8 # compute function return value - bdz .Lend1 - -.Loop: ldu r10,8(r4) - srd r9,r11,r6 - sld r12,r10,r8 - or r9,r9,r12 - stdu r9,8(r7) - bdz .Lend2 - ldu r11,8(r4) - srd r9,r10,r6 - sld r12,r11,r8 - or r9,r9,r12 - stdu r9,8(r7) - bdnz .Loop - -.Lend1: srd r0,r11,r6 - std r0,8(r7) - blr - -.Lend2: srd r0,r10,r6 - std r0,8(r7) - blr -EPILOGUE(mpn_rshift) diff --git a/rts/gmp/mpn/powerpc64/sub_n.asm b/rts/gmp/mpn/powerpc64/sub_n.asm deleted file mode 100644 index 4de3de6..0000000 --- a/rts/gmp/mpn/powerpc64/sub_n.asm +++ /dev/null @@ -1,61 +0,0 @@ -# PowerPC-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0 -# and store difference in a third limb vector. - -# Copyright (C) 1999, 2000 Free Software Foundation, Inc.b - -# This file is part of the GNU MP Library. - -# The GNU MP Library is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# s2_ptr r5 -# size r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_sub_n) - mtctr r6 # copy size into CTR - addic r0,r6,-1 # set cy - ld r8,0(r4) # load least significant s1 limb - ld r0,0(r5) # load least significant s2 limb - addi r3,r3,-8 # offset res_ptr, it's updated before it's used - bdz .Lend # If done, skip loop -.Loop: ld r9,8(r4) # load s1 limb - ld r10,8(r5) # load s2 limb - subfe r7,r0,r8 # subtract limbs with cy, set cy - std r7,8(r3) # store result limb - bdz .Lexit # decrement CTR and exit if done - ldu r8,16(r4) # load s1 limb and update s1_ptr - ldu r0,16(r5) # load s2 limb and update s2_ptr - subfe r7,r10,r9 # subtract limbs with cy, set cy - stdu r7,16(r3) # store result limb and update res_ptr - bdnz .Loop # decrement CTR and loop back - -.Lend: subfe r7,r0,r8 - std r7,8(r3) # store ultimate result limb - subfe r3,r0,r0 # load !cy into ... - subfic r3,r3,0 # ... return value register - blr -.Lexit: subfe r7,r10,r9 - std r7,16(r3) - subfe r3,r0,r0 # load !cy into ... - subfic r3,r3,0 # ... return value register - blr -EPILOGUE(mpn_sub_n) diff --git a/rts/gmp/mpn/powerpc64/submul_1.asm b/rts/gmp/mpn/powerpc64/submul_1.asm deleted file mode 100644 index 17f6369..0000000 --- a/rts/gmp/mpn/powerpc64/submul_1.asm +++ /dev/null @@ -1,54 +0,0 @@ -# PowerPC-64 mpn_submul_1 -- Multiply a limb vector with a limb and subtract -# the result from a second limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr r3 -# s1_ptr r4 -# size r5 -# s2_limb r6 - -include(`../config.m4') - -ASM_START() -PROLOGUE(mpn_submul_1) - mtctr 5 - li 9,0 # cy_limb = 0 - addic 0,0,0 - cal 3,-8(3) - cal 4,-8(4) -.Loop: - ldu 0,8(4) - ld 10,8(3) - mulld 7,0,6 - adde 7,7,9 - mulhdu 9,0,6 - addze 9,9 - subfc 7,7,10 - stdu 7,8(3) - subfe 11,11,11 # invert ... - addic 11,11,1 # ... carry - bdnz .Loop - - addze 3,9 - blr -EPILOGUE(mpn_submul_1) diff --git a/rts/gmp/mpn/pyr/add_n.s b/rts/gmp/mpn/pyr/add_n.s deleted file mode 100644 index e1fc535..0000000 --- a/rts/gmp/mpn/pyr/add_n.s +++ /dev/null @@ -1,76 +0,0 @@ -# Pyramid __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -# sum in a third limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 2 -.globl ___gmpn_add_n -___gmpn_add_n: - movw $-1,tr0 # representation for carry clear - - movw pr3,tr2 - andw $3,tr2 - beq Lend0 - subw tr2,pr3 - -Loop0: rsubw $0,tr0 # restore carry bit from carry-save register - - movw (pr1),tr1 - addwc (pr2),tr1 - movw tr1,(pr0) - - subwb tr0,tr0 - addw $4,pr0 - addw $4,pr1 - addw $4,pr2 - addw $-1,tr2 - bne Loop0 - - mtstw pr3,pr3 - beq Lend -Lend0: -Loop: rsubw $0,tr0 # restore carry bit from carry-save register - - movw (pr1),tr1 - addwc (pr2),tr1 - movw tr1,(pr0) - - movw 4(pr1),tr1 - addwc 4(pr2),tr1 - movw tr1,4(pr0) - - movw 8(pr1),tr1 - addwc 8(pr2),tr1 - movw tr1,8(pr0) - - movw 12(pr1),tr1 - addwc 12(pr2),tr1 - movw tr1,12(pr0) - - subwb tr0,tr0 - addw $16,pr0 - addw $16,pr1 - addw $16,pr2 - addw $-4,pr3 - bne Loop -Lend: - mnegw tr0,pr0 - ret diff --git a/rts/gmp/mpn/pyr/addmul_1.s b/rts/gmp/mpn/pyr/addmul_1.s deleted file mode 100644 index 65c3f8f..0000000 --- a/rts/gmp/mpn/pyr/addmul_1.s +++ /dev/null @@ -1,45 +0,0 @@ -# Pyramid __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 2 -.globl ___gmpn_addmul_1 -___gmpn_addmul_1: - mova (pr0)[pr2*4],pr0 - mova (pr1)[pr2*4],pr1 - mnegw pr2,pr2 - movw $0,tr3 - -Loop: movw (pr1)[pr2*4],tr1 - uemul pr3,tr0 - addw tr3,tr1 - movw $0,tr3 - addwc tr0,tr3 - movw (pr0)[pr2*0x4],tr0 - addw tr0,tr1 - addwc $0,tr3 - movw tr1,(pr0)[pr2*4] - addw $1,pr2 - bne Loop - - movw tr3,pr0 - ret diff --git a/rts/gmp/mpn/pyr/mul_1.s b/rts/gmp/mpn/pyr/mul_1.s deleted file mode 100644 index 1272297..0000000 --- a/rts/gmp/mpn/pyr/mul_1.s +++ /dev/null @@ -1,42 +0,0 @@ -# Pyramid __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 2 -.globl ___gmpn_mul_1 -___gmpn_mul_1: - mova (pr0)[pr2*4],pr0 - mova (pr1)[pr2*4],pr1 - mnegw pr2,pr2 - movw $0,tr3 - -Loop: movw (pr1)[pr2*4],tr1 - uemul pr3,tr0 - addw tr3,tr1 - movw $0,tr3 - addwc tr0,tr3 - movw tr1,(pr0)[pr2*4] - addw $1,pr2 - bne Loop - - movw tr3,pr0 - ret diff --git a/rts/gmp/mpn/pyr/sub_n.s b/rts/gmp/mpn/pyr/sub_n.s deleted file mode 100644 index 1fd2eb0..0000000 --- a/rts/gmp/mpn/pyr/sub_n.s +++ /dev/null @@ -1,76 +0,0 @@ -# Pyramid __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -# store difference in a third limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - -.text - .align 2 -.globl ___gmpn_sub_n -___gmpn_sub_n: - movw $-1,tr0 # representation for carry clear - - movw pr3,tr2 - andw $3,tr2 - beq Lend0 - subw tr2,pr3 - -Loop0: rsubw $0,tr0 # restore carry bit from carry-save register - - movw (pr1),tr1 - subwb (pr2),tr1 - movw tr1,(pr0) - - subwb tr0,tr0 - addw $4,pr0 - addw $4,pr1 - addw $4,pr2 - addw $-1,tr2 - bne Loop0 - - mtstw pr3,pr3 - beq Lend -Lend0: -Loop: rsubw $0,tr0 # restore carry bit from carry-save register - - movw (pr1),tr1 - subwb (pr2),tr1 - movw tr1,(pr0) - - movw 4(pr1),tr1 - subwb 4(pr2),tr1 - movw tr1,4(pr0) - - movw 8(pr1),tr1 - subwb 8(pr2),tr1 - movw tr1,8(pr0) - - movw 12(pr1),tr1 - subwb 12(pr2),tr1 - movw tr1,12(pr0) - - subwb tr0,tr0 - addw $16,pr0 - addw $16,pr1 - addw $16,pr2 - addw $-4,pr3 - bne Loop -Lend: - mnegw tr0,pr0 - ret diff --git a/rts/gmp/mpn/sh/add_n.s b/rts/gmp/mpn/sh/add_n.s deleted file mode 100644 index df388b3..0000000 --- a/rts/gmp/mpn/sh/add_n.s +++ /dev/null @@ -1,47 +0,0 @@ -! SH __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -! sum in a third limb vector. - -! Copyright (C) 1995, 1997, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r4 -! s1_ptr r5 -! s2_ptr r6 -! size r7 - - .text - .align 2 - .global ___gmpn_add_n -___gmpn_add_n: - mov #0,r3 ! clear cy save reg - -Loop: mov.l @r5+,r1 - mov.l @r6+,r2 - shlr r3 ! restore cy - addc r2,r1 - movt r3 ! save cy - mov.l r1,@r4 - dt r7 - bf.s Loop - add #4,r4 - - rts - mov r3,r0 ! return carry-out from most sign. limb diff --git a/rts/gmp/mpn/sh/sh2/addmul_1.s b/rts/gmp/mpn/sh/sh2/addmul_1.s deleted file mode 100644 index f34a7f0..0000000 --- a/rts/gmp/mpn/sh/sh2/addmul_1.s +++ /dev/null @@ -1,53 +0,0 @@ -! SH2 __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -! the result to a second limb vector. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r4 -! s1_ptr r5 -! size r6 -! s2_limb r7 - - .text - .align 1 - .global ___gmpn_addmul_1 -___gmpn_addmul_1: - mov #0,r2 ! cy_limb = 0 - mov #0,r0 ! Keep r0 = 0 for entire loop - clrt - -Loop: mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 ! lo_prod += old cy_limb - sts mach,r2 ! new cy_limb = hi_prod - mov.l @r4,r3 - addc r0,r2 ! cy_limb += T, T = 0 - addc r3,r1 - addc r0,r2 ! cy_limb += T, T = 0 - dt r6 - mov.l r1,@r4 - bf.s Loop - add #4,r4 - - rts - mov r2,r0 diff --git a/rts/gmp/mpn/sh/sh2/mul_1.s b/rts/gmp/mpn/sh/sh2/mul_1.s deleted file mode 100644 index 2a117a3..0000000 --- a/rts/gmp/mpn/sh/sh2/mul_1.s +++ /dev/null @@ -1,50 +0,0 @@ -! SH2 __gmpn_mul_1 -- Multiply a limb vector with a limb and store -! the result in a second limb vector. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r4 -! s1_ptr r5 -! size r6 -! s2_limb r7 - - .text - .align 1 - .global ___gmpn_mul_1 -___gmpn_mul_1: - mov #0,r2 ! cy_limb = 0 - mov #0,r0 ! Keep r0 = 0 for entire loop - clrt - -Loop: mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 - sts mach,r2 - addc r0,r2 ! propagate carry to cy_limb (dt clobbers T) - dt r6 - mov.l r1,@r4 - bf.s Loop - add #4,r4 - - rts - mov r2,r0 diff --git a/rts/gmp/mpn/sh/sh2/submul_1.s b/rts/gmp/mpn/sh/sh2/submul_1.s deleted file mode 100644 index eb9a27d..0000000 --- a/rts/gmp/mpn/sh/sh2/submul_1.s +++ /dev/null @@ -1,53 +0,0 @@ -! SH2 __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract -! the result from a second limb vector. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r4 -! s1_ptr r5 -! size r6 -! s2_limb r7 - - .text - .align 1 - .global ___gmpn_submul_1 -___gmpn_submul_1: - mov #0,r2 ! cy_limb = 0 - mov #0,r0 ! Keep r0 = 0 for entire loop - clrt - -Loop: mov.l @r5+,r3 - dmulu.l r3,r7 - sts macl,r1 - addc r2,r1 ! lo_prod += old cy_limb - sts mach,r2 ! new cy_limb = hi_prod - mov.l @r4,r3 - addc r0,r2 ! cy_limb += T, T = 0 - subc r3,r1 - addc r0,r2 ! cy_limb += T, T = 0 - dt r6 - mov.l r1,@r4 - bf.s Loop - add #4,r4 - - rts - mov r2,r0 diff --git a/rts/gmp/mpn/sh/sub_n.s b/rts/gmp/mpn/sh/sub_n.s deleted file mode 100644 index 5f818c9..0000000 --- a/rts/gmp/mpn/sh/sub_n.s +++ /dev/null @@ -1,47 +0,0 @@ -! SH __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store -! difference in a third limb vector. - -! Copyright (C) 1995, 1997, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r4 -! s1_ptr r5 -! s2_ptr r6 -! size r7 - - .text - .align 2 - .global ___gmpn_sub_n -___gmpn_sub_n: - mov #0,r3 ! clear cy save reg - -Loop: mov.l @r5+,r1 - mov.l @r6+,r2 - shlr r3 ! restore cy - subc r2,r1 - movt r3 ! save cy - mov.l r1,@r4 - dt r7 - bf.s Loop - add #4,r4 - - rts - mov r3,r0 ! return carry-out from most sign. limb diff --git a/rts/gmp/mpn/sparc32/README b/rts/gmp/mpn/sparc32/README deleted file mode 100644 index 7c19df7..0000000 --- a/rts/gmp/mpn/sparc32/README +++ /dev/null @@ -1,36 +0,0 @@ -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 instrucitons into a STD when possible is a -significant optimiation. - -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. - -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 instrucitons. See a29k/addmul_1. - -The speed of the code for other SPARC implementations is uncertain. diff --git a/rts/gmp/mpn/sparc32/add_n.asm b/rts/gmp/mpn/sparc32/add_n.asm deleted file mode 100644 index 5f1d00c..0000000 --- a/rts/gmp/mpn/sparc32/add_n.asm +++ /dev/null @@ -1,236 +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 (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/addmul_1.asm b/rts/gmp/mpn/sparc32/addmul_1.asm deleted file mode 100644 index 80c94e4..0000000 --- a/rts/gmp/mpn/sparc32/addmul_1.asm +++ /dev/null @@ -1,146 +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 (C) 1992, 1993, 1994, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/lshift.asm b/rts/gmp/mpn/sparc32/lshift.asm deleted file mode 100644 index 529733a..0000000 --- a/rts/gmp/mpn/sparc32/lshift.asm +++ /dev/null @@ -1,97 +0,0 @@ -dnl SPARC mpn_lshift -- Shift a number left. -dnl - -dnl Copyright (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/mul_1.asm b/rts/gmp/mpn/sparc32/mul_1.asm deleted file mode 100644 index e5fedea..0000000 --- a/rts/gmp/mpn/sparc32/mul_1.asm +++ /dev/null @@ -1,137 +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 (C) 1992, 1993, 1994, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/rshift.asm b/rts/gmp/mpn/sparc32/rshift.asm deleted file mode 100644 index 9187dba..0000000 --- a/rts/gmp/mpn/sparc32/rshift.asm +++ /dev/null @@ -1,93 +0,0 @@ -dnl SPARC mpn_rshift -- Shift a number right. - -dnl Copyright (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/sub_n.asm b/rts/gmp/mpn/sparc32/sub_n.asm deleted file mode 100644 index 071909a..0000000 --- a/rts/gmp/mpn/sparc32/sub_n.asm +++ /dev/null @@ -1,326 +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 (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/submul_1.asm b/rts/gmp/mpn/sparc32/submul_1.asm deleted file mode 100644 index 12abd84..0000000 --- a/rts/gmp/mpn/sparc32/submul_1.asm +++ /dev/null @@ -1,146 +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 (C) 1992, 1993, 1994, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/udiv_fp.asm b/rts/gmp/mpn/sparc32/udiv_fp.asm deleted file mode 100644 index e340e14..0000000 --- a/rts/gmp/mpn/sparc32/udiv_fp.asm +++ /dev/null @@ -1,158 +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 (C) 1993, 1994, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/udiv_nfp.asm b/rts/gmp/mpn/sparc32/udiv_nfp.asm deleted file mode 100644 index ae19f4c..0000000 --- a/rts/gmp/mpn/sparc32/udiv_nfp.asm +++ /dev/null @@ -1,193 +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 (C) 1993, 1994, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/umul.asm b/rts/gmp/mpn/sparc32/umul.asm deleted file mode 100644 index efa5685..0000000 --- a/rts/gmp/mpn/sparc32/umul.asm +++ /dev/null @@ -1,68 +0,0 @@ -dnl SPARC mpn_umul_ppmm -- support for longlong.h for non-gcc. - -dnl Copyright (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v8/addmul_1.asm b/rts/gmp/mpn/sparc32/v8/addmul_1.asm deleted file mode 100644 index da44644..0000000 --- a/rts/gmp/mpn/sparc32/v8/addmul_1.asm +++ /dev/null @@ -1,122 +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 (C) 1992, 1993, 1994, 1995, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v8/mul_1.asm b/rts/gmp/mpn/sparc32/v8/mul_1.asm deleted file mode 100644 index 8012475..0000000 --- a/rts/gmp/mpn/sparc32/v8/mul_1.asm +++ /dev/null @@ -1,103 +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 (C) 1992, 1994, 1995, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v8/submul_1.asm b/rts/gmp/mpn/sparc32/v8/submul_1.asm deleted file mode 100644 index 9ed132f..0000000 --- a/rts/gmp/mpn/sparc32/v8/submul_1.asm +++ /dev/null @@ -1,58 +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 (C) 1992, 1993, 1994, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v8/supersparc/udiv.asm b/rts/gmp/mpn/sparc32/v8/supersparc/udiv.asm deleted file mode 100644 index 0d5e8d4..0000000 --- a/rts/gmp/mpn/sparc32/v8/supersparc/udiv.asm +++ /dev/null @@ -1,122 +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 (C) 1993, 1994, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v8/umul.asm b/rts/gmp/mpn/sparc32/v8/umul.asm deleted file mode 100644 index ae8f692..0000000 --- a/rts/gmp/mpn/sparc32/v8/umul.asm +++ /dev/null @@ -1,31 +0,0 @@ -dnl SPARC v8 mpn_umul_ppmm -- support for longlong.h for non-gcc. - -dnl Copyright (C) 1995, 1996, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -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/rts/gmp/mpn/sparc32/v9/README b/rts/gmp/mpn/sparc32/v9/README deleted file mode 100644 index 9b39713..0000000 --- a/rts/gmp/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/rts/gmp/mpn/sparc32/v9/addmul_1.asm b/rts/gmp/mpn/sparc32/v9/addmul_1.asm deleted file mode 100644 index c1762cc..0000000 --- a/rts/gmp/mpn/sparc32/v9/addmul_1.asm +++ /dev/null @@ -1,288 +0,0 @@ -dnl SPARC v9 32-bit mpn_addmul_1 -- Multiply a limb vector with a limb and -dnl add the result to a second limb vector. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - - TEXT - ALIGN(4) -L(noll): - .word 0 - -PROLOGUE(mpn_addmul_1) - save %sp,-256,%sp - -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hi(L(noll)),%g1 - ld [%g1+%lo(L(noll))],%f10') - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1],%f11 - subcc %i2,1,%i2 - be,pn %icc,L(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end2) - std %f12,[%fp-16] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end3) - std %f12,[%fp-32] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,L(end4) - std %f12,[%fp-16] - - b,a L(loopm) - - .align 16 -C BEGIN LOOP -L(loop): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - subcc %i2,1,%i2 - be,pn %icc,L(loope) - add %i0,4,%i0 C res_ptr++ -L(loopm): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - subcc %i2,1,%i2 - bne,pt %icc,L(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP - - fxtod %f10,%f2 - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - b,a L(xxx) -L(loope): -L(end4): - fxtod %f10,%f2 - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - b,a L(yyy) - -L(end3): - fxtod %f10,%f2 - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 -L(xxx): fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 -L(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end1): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - -L(ret): add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - st %g4,[%i0-4] - - ret - restore %g0,%g3,%o0 C sideeffect: put cy in retreg -EPILOGUE(mpn_addmul_1) diff --git a/rts/gmp/mpn/sparc32/v9/gmp-mparam.h b/rts/gmp/mpn/sparc32/v9/gmp-mparam.h deleted file mode 100644 index f946b90..0000000 --- a/rts/gmp/mpn/sparc32/v9/gmp-mparam.h +++ /dev/null @@ -1,69 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -/* These values are for UltraSPARC I, II, and IIi. It is bogus that - this file lives in v9, but that will do for now. */ - -/* Variations in addmul_1 speed make the multiply and square thresholds - doubtful. TOOM3_SQR_THRESHOLD had to be estimated here. */ - -/* Generated by tuneup.c, 2000-07-06. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 30 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 200 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 59 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 500 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 107 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 146 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 29 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 3 -#endif diff --git a/rts/gmp/mpn/sparc32/v9/mul_1.asm b/rts/gmp/mpn/sparc32/v9/mul_1.asm deleted file mode 100644 index f8f0fdd..0000000 --- a/rts/gmp/mpn/sparc32/v9/mul_1.asm +++ /dev/null @@ -1,267 +0,0 @@ -dnl SPARC v9 32-bit mpn_mul_1 -- Multiply a limb vector with a limb and -dnl store the result in a second limb vector. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - - TEXT - ALIGN(4) -L(noll): - .word 0 - -PROLOGUE(mpn_mul_1) - save %sp,-256,%sp - -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hi(L(noll)),%g1 - ld [%g1+%lo(L(noll))],%f10') - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1],%f11 - subcc %i2,1,%i2 - be,pn %icc,L(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end2) - std %f12,[%fp-16] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end3) - std %f12,[%fp-32] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,L(end4) - std %f12,[%fp-16] - - b,a L(loopm) - - .align 16 -C BEGIN LOOP -L(loop): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - subcc %i2,1,%i2 - be,pn %icc,L(loope) - add %i0,4,%i0 C res_ptr++ -L(loopm): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - subcc %i2,1,%i2 - bne,pt %icc,L(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP - - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - b,a L(xxx) -L(loope): -L(end4): - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - b,a L(yyy) - -L(end3): - fxtod %f10,%f2 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 -L(xxx): fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 -L(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end1): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - -L(ret): add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - st %g4,[%i0-4] - - ret - restore %g0,%g3,%o0 C sideeffect: put cy in retreg -EPILOGUE(mpn_mul_1) diff --git a/rts/gmp/mpn/sparc32/v9/submul_1.asm b/rts/gmp/mpn/sparc32/v9/submul_1.asm deleted file mode 100644 index 6195ea8..0000000 --- a/rts/gmp/mpn/sparc32/v9/submul_1.asm +++ /dev/null @@ -1,291 +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 (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - - TEXT - ALIGN(4) -L(noll): - .word 0 - -PROLOGUE(mpn_submul_1) - save %sp,-256,%sp - -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hi(L(noll)),%g1 - ld [%g1+%lo(L(noll))],%f10') - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-16] - ld [%fp-16],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1],%f11 - subcc %i2,1,%i2 - be,pn %icc,L(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end2) - std %f12,[%fp-16] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,L(end3) - std %f12,[%fp-32] - - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,L(end4) - std %f12,[%fp-16] - - b,a L(loopm) - - .align 16 -C BEGIN LOOP -L(loop): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - subcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - addx %g3,0,%g3 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - subcc %i2,1,%i2 - be,pn %icc,L(loope) - add %i0,4,%i0 C res_ptr++ -L(loopm): - fxtod %f10,%f2 - ld [%i1],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - subcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - addx %g3,0,%g3 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - subcc %i2,1,%i2 - bne,pt %icc,L(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP - - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - subcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - b,a L(xxx) -L(loope): -L(end4): - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - subcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-32],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - b,a L(yyy) - -L(end3): - fxtod %f10,%f2 - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-16],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 -L(xxx): fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-40] - fdtox %f4,%f12 - std %f12,[%fp-32] - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 -L(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0],%g5 - srlx %g4,32,%g3 - ldx [%fp-40],%g2 C p16 - ldx [%fp-32],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - b,a L(ret) - -L(end1): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-24] - fdtox %f4,%f12 - std %f12,[%fp-16] - - ld [%i0],%g5 - ldx [%fp-24],%g2 C p16 - ldx [%fp-16],%g1 C p0 - sllx %g2,16,%g2 C align p16 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - -L(ret): add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - srlx %g4,32,%g3 - st %l2,[%i0-4] - - addx %g3,%g0,%g3 - ret - restore %g0,%g3,%o0 C sideeffect: put cy in retreg -EPILOGUE(mpn_submul_1) diff --git a/rts/gmp/mpn/sparc64/README b/rts/gmp/mpn/sparc64/README deleted file mode 100644 index 6923a13..0000000 --- a/rts/gmp/mpn/sparc64/README +++ /dev/null @@ -1,48 +0,0 @@ -This directory contains mpn functions for 64-bit V9 SPARC - -RELEVANT OPTIMIZATION ISSUES - -The Ultra I/II pipeline executes up to two simple integer arithmetic operations -per cycle. 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 1st -source operand. It cannot overlap with other instructions. For our use of -mulx, it will take from 5 to 20 cycles. - -Integer conditional move instructions cannot dual-issue with other integer -instructions. No conditional move can issue 1-5 cycles after a load. (Or -something such bizzare.) - -Integer branches can issue with two integer arithmetic instructions. Likewise -for integer loads. Four instructions may issue (arith, arith, ld/st, branch) -but only if the branch is last. - -(The V9 architecture manual recommends that the 2nd operand of a multiply -instruction be the smaller one. For UltraSPARC, they got things backwards and -optimize for the wrong operand! Really helpful in the light of that multiply -is incredibly slow on these CPUs!) - -STATUS - -There is new code in ~/prec/gmp-remote/sparc64. Not tested or completed, but -the pipelines are worked out. Here are the timings: - -* lshift, rshift: The code is well-optimized and runs at 2.0 cycles/limb. - -* add_n, sub_n: add3.s currently runs at 6 cycles/limb. We use a bizarre - scheme of compares and branches (with some nops and fnops to align things) - and carefully stay away from the instructions intended for this application - (i.e., movcs and movcc). - - Using movcc/movcs, even with deep unrolling, seems to get down to 7 - cycles/limb. - - The most promising approach is to split operands in 32-bit pieces using - srlx, then use two addccc, and finally compile the results with sllx+or. - The result could run at 5 cycles/limb, I think. It might be possible to - do without unrolling, or with minimal unrolling. - -* addmul_1/submul_1: Should optimize for when scalar operand < 2^32. -* addmul_1/submul_1: Since mulx is horrendously slow on UltraSPARC I/II, - Karatsuba's method should save up to 16 cycles (i.e. > 20%). -* mul_1 (and possibly the other multiply functions): Handle carry in the - same tricky way as add_n,sub_n. diff --git a/rts/gmp/mpn/sparc64/add_n.asm b/rts/gmp/mpn/sparc64/add_n.asm deleted file mode 100644 index 72b3895..0000000 --- a/rts/gmp/mpn/sparc64/add_n.asm +++ /dev/null @@ -1,172 +0,0 @@ -! SPARC v9 __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -! sum in a third limb vector. - -! Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr %o0 -! s1_ptr %o1 -! s2_ptr %o2 -! size %o3 - -include(`../config.m4') - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch -PROLOGUE(mpn_add_n) - -! 12 mem ops >= 12 cycles -! 8 shift insn >= 8 cycles -! 8 addccc, executing alone, +8 cycles -! Unrolling not mandatory...perhaps 2-way is best? -! Put one ldx/stx and one s?lx per issue tuple, fill with pointer arith and loop ctl -! All in all, it runs at 5 cycles/limb - - save %sp,-160,%sp - - addcc %g0,%g0,%g0 - - add %i3,-4,%i3 - brlz,pn %i3,L(there) - nop - - ldx [%i1+0],%l0 - ldx [%i2+0],%l4 - ldx [%i1+8],%l1 - ldx [%i2+8],%l5 - ldx [%i1+16],%l2 - ldx [%i2+16],%l6 - ldx [%i1+24],%l3 - ldx [%i2+24],%l7 - add %i1,32,%i1 - add %i2,32,%i2 - - add %i3,-4,%i3 - brlz,pn %i3,L(skip) - nop - b L(loop1) ! jump instead of executing many NOPs - nop - ALIGN(32) -!--------- Start main loop --------- -L(loop1): - addccc %l0,%l4,%g1 -!- - srlx %l0,32,%o0 - ldx [%i1+0],%l0 -!- - srlx %l4,32,%o4 - ldx [%i2+0],%l4 -!- - addccc %o0,%o4,%g0 -!- - addccc %l1,%l5,%g2 -!- - srlx %l1,32,%o1 - ldx [%i1+8],%l1 -!- - srlx %l5,32,%o5 - ldx [%i2+8],%l5 -!- - addccc %o1,%o5,%g0 -!- - addccc %l2,%l6,%g3 -!- - srlx %l2,32,%o2 - ldx [%i1+16],%l2 -!- - srlx %l6,32,%g5 ! asymmetry - ldx [%i2+16],%l6 -!- - addccc %o2,%g5,%g0 -!- - addccc %l3,%l7,%g4 -!- - srlx %l3,32,%o3 - ldx [%i1+24],%l3 - add %i1,32,%i1 -!- - srlx %l7,32,%o7 - ldx [%i2+24],%l7 - add %i2,32,%i2 -!- - addccc %o3,%o7,%g0 -!- - stx %g1,[%i0+0] -!- - stx %g2,[%i0+8] -!- - stx %g3,[%i0+16] - add %i3,-4,%i3 -!- - stx %g4,[%i0+24] - add %i0,32,%i0 - - brgez,pt %i3,L(loop1) - nop -!--------- End main loop --------- -L(skip): - addccc %l0,%l4,%g1 - srlx %l0,32,%o0 - srlx %l4,32,%o4 - addccc %o0,%o4,%g0 - addccc %l1,%l5,%g2 - srlx %l1,32,%o1 - srlx %l5,32,%o5 - addccc %o1,%o5,%g0 - addccc %l2,%l6,%g3 - srlx %l2,32,%o2 - srlx %l6,32,%g5 ! asymmetry - addccc %o2,%g5,%g0 - addccc %l3,%l7,%g4 - srlx %l3,32,%o3 - srlx %l7,32,%o7 - addccc %o3,%o7,%g0 - stx %g1,[%i0+0] - stx %g2,[%i0+8] - stx %g3,[%i0+16] - stx %g4,[%i0+24] - add %i0,32,%i0 - -L(there): - add %i3,4,%i3 - brz,pt %i3,L(end) - nop - -L(loop2): - ldx [%i1+0],%l0 - add %i1,8,%i1 - ldx [%i2+0],%l4 - add %i2,8,%i2 - srlx %l0,32,%g2 - srlx %l4,32,%g3 - addccc %l0,%l4,%g1 - addccc %g2,%g3,%g0 - stx %g1,[%i0+0] - add %i0,8,%i0 - add %i3,-1,%i3 - brgz,pt %i3,L(loop2) - nop - -L(end): addc %g0,%g0,%i0 - ret - restore -EPILOGUE(mpn_add_n) diff --git a/rts/gmp/mpn/sparc64/addmul1h.asm b/rts/gmp/mpn/sparc64/addmul1h.asm deleted file mode 100644 index 96cb5f7..0000000 --- a/rts/gmp/mpn/sparc64/addmul1h.asm +++ /dev/null @@ -1,203 +0,0 @@ -dnl SPARC 64-bit addmull/addmulu -- Helper for mpn_addmul_1 and mpn_mul_1. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -ifdef(`LOWPART', -`addmull:', -`addmulu:') - save %sp,-256,%sp - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1+4],%f11 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-25] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,E(end2) - std %f12,[%fp-17] - - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end3) - std %f12,[%fp-33] - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - ld [%i0+DLO],%g5 - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,E(end4) - std %f12,[%fp-17] - - b,a E(loop) - nop C nop is cheap to nullify - - ALIGN(16) -C BEGIN LOOP -E(loop): - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0+DHI],%g5 - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - sub %i2,2,%i2 - add %i0,4,%i0 C res_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0+DLO],%g5 - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DHI] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - std %f12,[%fp-17] - brnz,pt %i2,E(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP -E(loope): -E(end4): - fxtod %f10,%f2 - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0+DHI],%g5 - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy - ld [%i0+DLO],%g5 - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DHI] - b,a E(yyy) - -E(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - ld [%i0+DLO],%g5 - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 -E(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g5,%g1,%g1 C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy -ifdef(`LOWPART', -` ld [%i0+DHI],%g5') - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - ldx [%fp-33],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - -ifdef(`LOWPART', -` add %g5,%g1,%g1') C add *res_ptr to p0 (ADD2) - add %g3,%g1,%g4 C p += cy -ifdef(`LOWPART', -` st %g4,[%i0-4+DHI] - srlx %g4,32,%g4') - - ret - restore %g0,%g4,%o0 C sideeffect: put cy in retreg -ifdef(`LOWPART', -`EPILOGUE(addmull)', -`EPILOGUE(addmulu)') diff --git a/rts/gmp/mpn/sparc64/addmul_1.asm b/rts/gmp/mpn/sparc64/addmul_1.asm deleted file mode 100644 index c3f04ce..0000000 --- a/rts/gmp/mpn/sparc64/addmul_1.asm +++ /dev/null @@ -1,114 +0,0 @@ -dnl SPARC 64-bit mpn_addmul_1 -- Multiply a limb vector with a limb and -dnl add the result to a second limb vector. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch - -PROLOGUE(mpn_addmul_1) - save %sp,-256,%sp - -C We store 0.0 in f10 and keep it invariant accross thw two -C function calls below. Note that this is not ABI conformant, -C but since the functions are local, that's acceptable. -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hh(L(noll)),%g2 - sethi %lm(L(noll)),%g1 - or %g2,%hm(L(noll)),%g2 - or %g1,%lo(L(noll)),%g1 - sllx %g2,32,%g2 - ld [%g1+%g2],%f10') - - sub %i1,%i0,%g1 - srlx %g1,3,%g1 - cmp %g1,%i2 - bcc,pt %xcc,L(nooverlap) - nop - - sllx %i2,3,%g2 C compute stack allocation byte count - add %g2,15,%o0 - and %o0,-16,%o0 - sub %sp,%o0,%sp - add %sp,2223,%o0 - - mov %i1,%o1 C copy s1_ptr to mpn_copyi's srcp - call mpn_copyi - mov %i2,%o2 C copy n to mpn_copyi's count parameter - - add %sp,2223,%i1 - -L(nooverlap): -C First multiply-add with low 32 bits of s2_limb - mov %i0,%o0 - mov %i1,%o1 - add %i2,%i2,%o2 - call addmull - srl %i3,0,%o3 - - mov %o0,%l0 C keep carry-out from accmull - -C Now multiply-add with high 32 bits of s2_limb, unless it is zero. - srlx %i3,32,%o3 - brz,a,pn %o3,L(small) - mov %o0,%i0 - mov %i1,%o1 - add %i2,%i2,%o2 - call addmulu - add %i0,4,%o0 - - add %l0,%o0,%i0 -L(small): - ret - restore %g0,%g0,%g0 -EPILOGUE(mpn_addmul_1) - -C Put a zero in the text segment to allow us to t the address -C quickly when compiling for PIC - TEXT - ALIGN(4) -L(noll): - .word 0 - -define(`LO',`(+4)') -define(`HI',`(-4)') - -define(`DLO',`(+4)') -define(`DHI',`(-4)') -define(`LOWPART') -define(`E',`L(l.$1)') -include_mpn(`sparc64/addmul1h.asm') - -define(`DLO',`(-4)') -define(`DHI',`(+4)') -undefine(`LOWPART') -define(`E',`L(u.$1)') -include_mpn(`sparc64/addmul1h.asm') diff --git a/rts/gmp/mpn/sparc64/copyi.asm b/rts/gmp/mpn/sparc64/copyi.asm deleted file mode 100644 index d9957e3..0000000 --- a/rts/gmp/mpn/sparc64/copyi.asm +++ /dev/null @@ -1,79 +0,0 @@ -! SPARC v9 __gmpn_copy -- Copy a limb vector. - -! Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! rptr %o0 -! sptr %o1 -! n %o2 - -include(`../config.m4') - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch -PROLOGUE(mpn_copyi) - add %o2,-8,%o2 - brlz,pn %o2,L(skip) - nop - b,a L(loop1) - nop - - ALIGN(16) -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] - add %o2,-8,%o2 - brgez,pt %o2,L(loop1) - add %o0,64,%o0 - -L(skip): - add %o2,8,%o2 - brz,pt %o2,L(end) - nop - -L(loop2): - ldx [%o1],%g1 - add %o1,8,%o1 - add %o2,-1,%o2 - stx %g1,[%o0] - add %o0,8,%o0 - brgz,pt %o2,L(loop2) - nop - -L(end): retl - nop -EPILOGUE(mpn_copyi) diff --git a/rts/gmp/mpn/sparc64/gmp-mparam.h b/rts/gmp/mpn/sparc64/gmp-mparam.h deleted file mode 100644 index 74f6166..0000000 --- a/rts/gmp/mpn/sparc64/gmp-mparam.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Sparc64 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 64 -#define BYTES_PER_MP_LIMB 8 -#define BITS_PER_LONGINT 64 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - -/* Tell the toom3 multiply implementation to call low-level mpn - functions instead of open-coding operations in C. */ -#define USE_MORE_MPN 1 - - -/* Run on sun workshop cc. */ -/* Generated by tuneup.c, 2000-07-30. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 12 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 95 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 33 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 125 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 27 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 107 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 12 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 199 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 304, 608, 1344, 2304, 7168, 20480, 49152, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 320 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 1664 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 304, 608, 1344, 2816, 7168, 20480, 49152, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 320 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 1664 -#endif diff --git a/rts/gmp/mpn/sparc64/lshift.asm b/rts/gmp/mpn/sparc64/lshift.asm deleted file mode 100644 index 2d2edc5..0000000 --- a/rts/gmp/mpn/sparc64/lshift.asm +++ /dev/null @@ -1,97 +0,0 @@ -! SPARC v9 __gmpn_lshift -- - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr %o0 -! src_ptr %o1 -! size %o2 -! cnt %o3 - -include(`../config.m4') - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch -PROLOGUE(mpn_lshift) - sllx %o2,3,%g1 - add %o1,%g1,%o1 ! make %o1 point at end of src - ldx [%o1-8],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o0,%g1,%o0 ! make %o0 point at end of res - add %o2,-1,%o2 - and %o2,4-1,%g4 ! number of limbs in first loop - srlx %g2,%o5,%g1 ! compute function result - brz,pn %g4,L(0) ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -L(loop0): - ldx [%o1-16],%g3 - add %o0,-8,%o0 - add %o1,-8,%o1 - add %g4,-1,%g4 - sllx %g2,%o3,%o4 - srlx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - brnz,pt %g4,L(loop0) - stx %o4,[%o0+0] - -L(0): brz,pn %o2,L(end) - nop - -L(loop1): - ldx [%o1-16],%g3 - add %o0,-32,%o0 - add %o2,-4,%o2 - sllx %g2,%o3,%o4 - srlx %g3,%o5,%g1 - - ldx [%o1-24],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+24] - srlx %g2,%o5,%g1 - - ldx [%o1-32],%g3 - sllx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0+16] - srlx %g3,%o5,%g1 - - ldx [%o1-40],%g2 - sllx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0+8] - srlx %g2,%o5,%g1 - - add %o1,-32,%o1 - or %g4,%g1,%g4 - brnz,pt %o2,L(loop1) - stx %g4,[%o0+0] - -L(end): sllx %g2,%o3,%g2 - stx %g2,[%o0-8] - retl - mov %g5,%o0 -EPILOGUE(mpn_lshift) diff --git a/rts/gmp/mpn/sparc64/mul_1.asm b/rts/gmp/mpn/sparc64/mul_1.asm deleted file mode 100644 index f2f2821..0000000 --- a/rts/gmp/mpn/sparc64/mul_1.asm +++ /dev/null @@ -1,113 +0,0 @@ -dnl SPARC 64-bit mpn_mul_1 -- Multiply a limb vector with a limb and -dnl store the result to a second limb vector. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch - -PROLOGUE(mpn_mul_1) - save %sp,-256,%sp - -C We store 0.0 in f10 and keep it invariant accross thw two -C function calls below. Note that this is not ABI conformant, -C but since the functions are local, that's acceptable. -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hh(L(noll)),%g2 - sethi %lm(L(noll)),%g1 - or %g2,%hm(L(noll)),%g2 - or %g1,%lo(L(noll)),%g1 - sllx %g2,32,%g2 - ld [%g1+%g2],%f10') - - sub %i1,%i0,%g1 - srlx %g1,3,%g1 - cmp %g1,%i2 - bcc,pt %xcc,L(nooverlap) - nop - - sllx %i2,3,%g2 C compute stack allocation byte count - add %g2,15,%o0 - and %o0,-16,%o0 - sub %sp,%o0,%sp - add %sp,2223,%o0 - - mov %i1,%o1 C copy s1_ptr to mpn_copyi's srcp - call mpn_copyi - mov %i2,%o2 C copy n to mpn_copyi's count parameter - - add %sp,2223,%i1 - -L(nooverlap): -C First multiply-add with low 32 bits of s2_limb - mov %i0,%o0 - mov %i1,%o1 - add %i2,%i2,%o2 - call mull - srl %i3,0,%o3 - - mov %o0,%l0 C keep carry-out from accmull - -C Now multiply-add with high 32 bits of s2_limb, unless it is zero. - srlx %i3,32,%o3 - brz,a,pn %o3,L(small) - mov %o0,%i0 - mov %i1,%o1 - add %i2,%i2,%o2 - call addmulu - add %i0,4,%o0 - - add %l0,%o0,%i0 -L(small): - ret - restore %g0,%g0,%g0 -EPILOGUE(mpn_mul_1) - -C Put a zero in the text segment to allow us to t the address -C quickly when compiling for PIC - TEXT - ALIGN(4) -L(noll): - .word 0 - -define(`LO',`(+4)') -define(`HI',`(-4)') - -define(`DLO',`(+4)') -define(`DHI',`(-4)') -define(`E',`L($1)') -include_mpn(`sparc64/mul_1h.asm') - -define(`DLO',`(-4)') -define(`DHI',`(+4)') -undefine(`LOWPART') -define(`E',`L(u.$1)') -include_mpn(`sparc64/addmul1h.asm') diff --git a/rts/gmp/mpn/sparc64/mul_1h.asm b/rts/gmp/mpn/sparc64/mul_1h.asm deleted file mode 100644 index 5078c01..0000000 --- a/rts/gmp/mpn/sparc64/mul_1h.asm +++ /dev/null @@ -1,183 +0,0 @@ -dnl SPARC 64-bit mull -- Helper for mpn_mul_1. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -mull: - save %sp,-256,%sp - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1+4],%f11 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-25] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,E(end2) - std %f12,[%fp-17] - - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end3) - std %f12,[%fp-33] - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,E(end4) - std %f12,[%fp-17] - - b,a E(loop) - nop C nop is cheap to nullify - - ALIGN(16) -C BEGIN LOOP -E(loop): - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - sub %i2,2,%i2 - add %i0,4,%i0 C res_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DHI] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - std %f12,[%fp-17] - brnz,pt %i2,E(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP -E(loope): -E(end4): - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DHI] - b,a E(yyy) - -E(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 -E(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - ldx [%fp-33],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %g4,[%i0-4+DLO] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - st %g4,[%i0-4+DHI] - srlx %g4,32,%g4 - - ret - restore %g0,%g4,%o0 C sideeffect: put cy in retreg -EPILOGUE(mull) diff --git a/rts/gmp/mpn/sparc64/rshift.asm b/rts/gmp/mpn/sparc64/rshift.asm deleted file mode 100644 index baf7920..0000000 --- a/rts/gmp/mpn/sparc64/rshift.asm +++ /dev/null @@ -1,94 +0,0 @@ -! SPARC v9 __gmpn_rshift -- - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr %o0 -! src_ptr %o1 -! size %o2 -! cnt %o3 - -include(`../config.m4') - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch -PROLOGUE(mpn_rshift) - ldx [%o1],%g2 ! load first limb - sub %g0,%o3,%o5 ! negate shift count - add %o2,-1,%o2 - and %o2,4-1,%g4 ! number of limbs in first loop - sllx %g2,%o5,%g1 ! compute function result - brz,pn %g4,L(0) ! if multiple of 4 limbs, skip first loop - mov %g1,%g5 - - sub %o2,%g4,%o2 ! adjust count for main loop - -L(loop0): - ldx [%o1+8],%g3 - add %o0,8,%o0 - add %o1,8,%o1 - add %g4,-1,%g4 - srlx %g2,%o3,%o4 - sllx %g3,%o5,%g1 - mov %g3,%g2 - or %o4,%g1,%o4 - brnz,pt %g4,L(loop0) - stx %o4,[%o0-8] - -L(0): brz,pn %o2,L(end) - nop - -L(loop1): - ldx [%o1+8],%g3 - add %o0,32,%o0 - add %o2,-4,%o2 - srlx %g2,%o3,%o4 - sllx %g3,%o5,%g1 - - ldx [%o1+16],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-32] - sllx %g2,%o5,%g1 - - ldx [%o1+24],%g3 - srlx %g2,%o3,%o4 - or %g4,%g1,%g4 - stx %g4,[%o0-24] - sllx %g3,%o5,%g1 - - ldx [%o1+32],%g2 - srlx %g3,%o3,%g4 - or %o4,%g1,%o4 - stx %o4,[%o0-16] - sllx %g2,%o5,%g1 - - add %o1,32,%o1 - or %g4,%g1,%g4 - brnz %o2,L(loop1) - stx %g4,[%o0-8] - -L(end): srlx %g2,%o3,%g2 - stx %g2,[%o0-0] - retl - mov %g5,%o0 -EPILOGUE(mpn_rshift) diff --git a/rts/gmp/mpn/sparc64/sub_n.asm b/rts/gmp/mpn/sparc64/sub_n.asm deleted file mode 100644 index 6154713..0000000 --- a/rts/gmp/mpn/sparc64/sub_n.asm +++ /dev/null @@ -1,172 +0,0 @@ -! SPARC v9 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -! store difference in a third limb vector. - -! Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr %o0 -! s1_ptr %o1 -! s2_ptr %o2 -! size %o3 - -include(`../config.m4') - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch -PROLOGUE(mpn_sub_n) - -! 12 mem ops >= 12 cycles -! 8 shift insn >= 8 cycles -! 8 addccc, executing alone, +8 cycles -! Unrolling not mandatory...perhaps 2-way is best? -! Put one ldx/stx and one s?lx per issue tuple, fill with pointer arith and loop ctl -! All in all, it runs at 5 cycles/limb - - save %sp,-160,%sp - - addcc %g0,%g0,%g0 - - add %i3,-4,%i3 - brlz,pn %i3,L(there) - nop - - ldx [%i1+0],%l0 - ldx [%i2+0],%l4 - ldx [%i1+8],%l1 - ldx [%i2+8],%l5 - ldx [%i1+16],%l2 - ldx [%i2+16],%l6 - ldx [%i1+24],%l3 - ldx [%i2+24],%l7 - add %i1,32,%i1 - add %i2,32,%i2 - - add %i3,-4,%i3 - brlz,pn %i3,L(skip) - nop - b L(loop1) ! jump instead of executing many NOPs - nop - ALIGN(32) -!--------- Start main loop --------- -L(loop1): - subccc %l0,%l4,%g1 -!- - srlx %l0,32,%o0 - ldx [%i1+0],%l0 -!- - srlx %l4,32,%o4 - ldx [%i2+0],%l4 -!- - subccc %o0,%o4,%g0 -!- - subccc %l1,%l5,%g2 -!- - srlx %l1,32,%o1 - ldx [%i1+8],%l1 -!- - srlx %l5,32,%o5 - ldx [%i2+8],%l5 -!- - subccc %o1,%o5,%g0 -!- - subccc %l2,%l6,%g3 -!- - srlx %l2,32,%o2 - ldx [%i1+16],%l2 -!- - srlx %l6,32,%g5 ! asymmetry - ldx [%i2+16],%l6 -!- - subccc %o2,%g5,%g0 -!- - subccc %l3,%l7,%g4 -!- - srlx %l3,32,%o3 - ldx [%i1+24],%l3 - add %i1,32,%i1 -!- - srlx %l7,32,%o7 - ldx [%i2+24],%l7 - add %i2,32,%i2 -!- - subccc %o3,%o7,%g0 -!- - stx %g1,[%i0+0] -!- - stx %g2,[%i0+8] -!- - stx %g3,[%i0+16] - add %i3,-4,%i3 -!- - stx %g4,[%i0+24] - add %i0,32,%i0 - - brgez,pt %i3,L(loop1) - nop -!--------- End main loop --------- -L(skip): - subccc %l0,%l4,%g1 - srlx %l0,32,%o0 - srlx %l4,32,%o4 - subccc %o0,%o4,%g0 - subccc %l1,%l5,%g2 - srlx %l1,32,%o1 - srlx %l5,32,%o5 - subccc %o1,%o5,%g0 - subccc %l2,%l6,%g3 - srlx %l2,32,%o2 - srlx %l6,32,%g5 ! asymmetry - subccc %o2,%g5,%g0 - subccc %l3,%l7,%g4 - srlx %l3,32,%o3 - srlx %l7,32,%o7 - subccc %o3,%o7,%g0 - stx %g1,[%i0+0] - stx %g2,[%i0+8] - stx %g3,[%i0+16] - stx %g4,[%i0+24] - add %i0,32,%i0 - -L(there): - add %i3,4,%i3 - brz,pt %i3,L(end) - nop - -L(loop2): - ldx [%i1+0],%l0 - add %i1,8,%i1 - ldx [%i2+0],%l4 - add %i2,8,%i2 - srlx %l0,32,%g2 - srlx %l4,32,%g3 - subccc %l0,%l4,%g1 - subccc %g2,%g3,%g0 - stx %g1,[%i0+0] - add %i0,8,%i0 - add %i3,-1,%i3 - brgz,pt %i3,L(loop2) - nop - -L(end): addc %g0,%g0,%i0 - ret - restore -EPILOGUE(mpn_sub_n) diff --git a/rts/gmp/mpn/sparc64/submul1h.asm b/rts/gmp/mpn/sparc64/submul1h.asm deleted file mode 100644 index 7f51ba5..0000000 --- a/rts/gmp/mpn/sparc64/submul1h.asm +++ /dev/null @@ -1,204 +0,0 @@ -dnl SPARC 64-bit submull/submulu -- Helper for mpn_submul_1 and mpn_mul_1. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -ifdef(`LOWPART', -`submull:', -`submulu:') - save %sp,-256,%sp - - sethi %hi(0xffff0000),%o0 - andn %i3,%o0,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f6 - - srl %i3,16,%o0 - st %o0,[%fp-17] - ld [%fp-17],%f11 - fxtod %f10,%f8 - - mov 0,%g3 C cy = 0 - - ld [%i1+4],%f11 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end1) - add %i1,4,%i1 C s1_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-25] - fdtox %f4,%f12 - subcc %i2,1,%i2 - be,pn %icc,E(end2) - std %f12,[%fp-17] - - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - subcc %i2,1,%i2 -dnl be,pn %icc,E(end3) - std %f12,[%fp-33] - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - ld [%i0+DLO],%g5 - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - add %i0,4,%i0 C res_ptr++ - subcc %i2,1,%i2 - be,pn %icc,E(end4) - std %f12,[%fp-17] - - b,a E(loop) - nop C nop is cheap to nullify - - ALIGN(16) -C BEGIN LOOP -E(loop): - fxtod %f10,%f2 - ld [%i1+4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0+DHI],%g5 - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - sub %i2,2,%i2 - add %i0,4,%i0 C res_ptr++ - - fxtod %f10,%f2 - ld [%i1-4],%f11 - add %i1,4,%i1 C s1_ptr++ - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0+DLO],%g5 - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-17],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4+DHI] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-25] - fdtox %f4,%f12 - std %f12,[%fp-17] - brnz,pt %i2,E(loop) - add %i0,4,%i0 C res_ptr++ -C END LOOP -E(loope): -E(end4): - fxtod %f10,%f2 - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0+DHI],%g5 - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - fmuld %f2,%f8,%f16 - ldx [%fp-33],%g1 C p0 - fmuld %f2,%f6,%f4 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4+DLO] - fdtox %f16,%f14 - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) - ld [%i0+DLO],%g5 - srlx %g4,32,%g3 - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4+DHI] - b,a E(yyy) - -E(end2): - fxtod %f10,%f2 - fmuld %f2,%f8,%f16 - fmuld %f2,%f6,%f4 - fdtox %f16,%f14 - std %f14,[%fp-41] - fdtox %f4,%f12 - std %f12,[%fp-33] - ld [%i0+DLO],%g5 - ldx [%fp-25],%g2 C p16 - ldx [%fp-17],%g1 C p0 - sllx %g2,16,%g2 C align p16 -E(yyy): add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy - subxcc %g5,%g4,%l2 C add *res_ptr to p0 (ADD2) -ifdef(`LOWPART', -` ld [%i0+DHI],%g5') - srlx %g4,32,%g3 - ldx [%fp-41],%g2 C p16 - ldx [%fp-33],%g1 C p0 - sllx %g2,16,%g2 C align p16 - st %l2,[%i0-4+DLO] - add %g2,%g1,%g1 C add p16 to p0 (ADD1) - add %i0,4,%i0 C res_ptr++ - - add %g3,%g1,%g4 C p += cy -ifdef(`LOWPART', -` subxcc %g5,%g4,%l2') C add *res_ptr to p0 (ADD2) -ifdef(`LOWPART', -` st %l2,[%i0-4+DHI] - srlx %g4,32,%g4') - - addx %g4,0,%g4 - ret - restore %g0,%g4,%o0 C sideeffect: put cy in retreg -ifdef(`LOWPART', -`EPILOGUE(submull)', -`EPILOGUE(submulu)') diff --git a/rts/gmp/mpn/sparc64/submul_1.asm b/rts/gmp/mpn/sparc64/submul_1.asm deleted file mode 100644 index 7c6af0a..0000000 --- a/rts/gmp/mpn/sparc64/submul_1.asm +++ /dev/null @@ -1,114 +0,0 @@ -dnl SPARC 64-bit mpn_submul_1 -- Multiply a limb vector with a limb and -dnl subtract the result from a second limb vector. - -dnl Copyright (C) 1998, 2000 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 2.1 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; see the file COPYING.LIB. If not, write to -dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -dnl MA 02111-1307, USA. - -include(`../config.m4') - -C INPUT PARAMETERS -C res_ptr i0 -C s1_ptr i1 -C size i2 -C s2_limb i3 - -ASM_START() - .register %g2,#scratch - .register %g3,#scratch - -PROLOGUE(mpn_submul_1) - save %sp,-256,%sp - -C We store 0.0 in f10 and keep it invariant accross thw two -C function calls below. Note that this is not ABI conformant, -C but since the functions are local, that's acceptable. -ifdef(`PIC', -`L(pc): rd %pc,%o7 - ld [%o7+L(noll)-L(pc)],%f10', -` sethi %hh(L(noll)),%g2 - sethi %lm(L(noll)),%g1 - or %g2,%hm(L(noll)),%g2 - or %g1,%lo(L(noll)),%g1 - sllx %g2,32,%g2 - ld [%g1+%g2],%f10') - - sub %i1,%i0,%g1 - srlx %g1,3,%g1 - cmp %g1,%i2 - bcc,pt %xcc,L(nooverlap) - nop - - sllx %i2,3,%g2 C compute stack allocation byte count - add %g2,15,%o0 - and %o0,-16,%o0 - sub %sp,%o0,%sp - add %sp,2223,%o0 - - mov %i1,%o1 C copy s1_ptr to mpn_copyi's srcp - call mpn_copyi - mov %i2,%o2 C copy n to mpn_copyi's count parameter - - add %sp,2223,%i1 - -L(nooverlap): -C First multiply-add with low 32 bits of s2_limb - mov %i0,%o0 - mov %i1,%o1 - add %i2,%i2,%o2 - call submull - srl %i3,0,%o3 - - mov %o0,%l0 C keep carry-out from accmull - -C Now multiply-add with high 32 bits of s2_limb, unless it is zero. - srlx %i3,32,%o3 - brz,a,pn %o3,L(small) - mov %o0,%i0 - mov %i1,%o1 - add %i2,%i2,%o2 - call submulu - add %i0,4,%o0 - - add %l0,%o0,%i0 -L(small): - ret - restore %g0,%g0,%g0 -EPILOGUE(mpn_submul_1) - -C Put a zero in the text segment to allow us to t the address -C quickly when compiling for PIC - TEXT - ALIGN(4) -L(noll): - .word 0 - -define(`LO',`(+4)') -define(`HI',`(-4)') - -define(`DLO',`(+4)') -define(`DHI',`(-4)') -define(`LOWPART') -define(`E',`L(l.$1)') -include_mpn(`sparc64/submul1h.asm') - -define(`DLO',`(-4)') -define(`DHI',`(+4)') -undefine(`LOWPART') -define(`E',`L(u.$1)') -include_mpn(`sparc64/submul1h.asm') diff --git a/rts/gmp/mpn/thumb/add_n.s b/rts/gmp/mpn/thumb/add_n.s deleted file mode 100644 index c1eeb6c..0000000 --- a/rts/gmp/mpn/thumb/add_n.s +++ /dev/null @@ -1,50 +0,0 @@ -@ ARM/Thumb __gmpn_add -- Add two limb vectors of the same length > 0 and store -@ sum in a third limb vector. - -@ Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - - -@ INPUT PARAMETERS -@ RES_ptr r0 -@ S1_ptr r1 -@ S2_ptr r2 -@ SIZE r3 - -@ NOT TESTED CODE - - .text - .thumb - .align 0 - .global ___gmpn_add_n -___gmpn_add_n: - push {r4, r5, r6, lr} - mov r6, #1 @ init carry save register - -Loop: sub r6, #1 @ restore carry (set iff r6 was 0) - ldmia r1!, {r4} @ load next limb from S1 - ldmia r2!, {r5} @ load next limb from S2 - adc r4, r5 - stmia r0!, {r4} @ store result limb to RES - sbc r6, r6 @ save negated carry - sub r3, #1 - bge Loop @ loop back while remaining count >= 4 - - mov r0, r6 - pop {r4, r5, r6, pc} diff --git a/rts/gmp/mpn/thumb/sub_n.s b/rts/gmp/mpn/thumb/sub_n.s deleted file mode 100644 index 53c2923..0000000 --- a/rts/gmp/mpn/thumb/sub_n.s +++ /dev/null @@ -1,50 +0,0 @@ -@ ARM/Thumb __gmpn_sub -- Subtract two limb vectors of the same length > 0 and -@ store difference in a third limb vector. - -@ Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -@ the Free Software Foundation; either version 2.1 of the License, or (at your -@ option) any later version. - -@ The GNU MP Library is distributed in the hope that it will be useful, but -@ WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -@ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -@ License for more details. - -@ You should have received a copy of the GNU Lesser General Public License -@ along with the GNU MP Library; see the file COPYING.LIB. If not, write to -@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -@ MA 02111-1307, USA. - - -@ INPUT PARAMETERS -@ RES_ptr r0 -@ S1_ptr r1 -@ S2_ptr r2 -@ SIZE r3 - -@ NOT TESTED CODE - - .text - .thumb - .align 0 - .global ___gmpn_sub_n -___gmpn_sub_n: - push {r4, r5, r6, lr} - mov r6, #1 @ init carry save register - -Loop: sub r6, #1 @ restore carry (set iff r6 was 0) - ldmia r1!, {r4} @ load next limb from S1 - ldmia r2!, {r5} @ load next limb from S2 - sbc r4, r5 - stmia r0!, {r4} @ store result limb to RES - sbc r6, r6 @ save negated carry - sub r3, #1 - bge Loop @ loop back while remaining count >= 4 - - mov r0, r6 - pop {r4, r5, r6, pc} diff --git a/rts/gmp/mpn/underscore.h b/rts/gmp/mpn/underscore.h deleted file mode 100644 index 240dae0..0000000 --- a/rts/gmp/mpn/underscore.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#if __STDC__ -#define C_SYMBOL_NAME(name) _##name -#else -#define C_SYMBOL_NAME(name) _/**/name -#endif diff --git a/rts/gmp/mpn/vax/add_n.s b/rts/gmp/mpn/vax/add_n.s deleted file mode 100644 index cf4060f..0000000 --- a/rts/gmp/mpn/vax/add_n.s +++ /dev/null @@ -1,61 +0,0 @@ -# VAX __gmpn_add_n -- Add two limb vectors of the same length > 0 and store -# sum in a third limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# s2_ptr (sp + 12) -# size (sp + 16) - -.text - .align 1 -.globl ___gmpn_add_n -___gmpn_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 # unroll loop count - bicl2 $-4,r5 # mask out low 2 bits - movaq (r5)[r5],r5 # 9x - jmp Loop(r5) - -Loop: 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,Loop - - adwc r0,r0 - ret diff --git a/rts/gmp/mpn/vax/addmul_1.s b/rts/gmp/mpn/vax/addmul_1.s deleted file mode 100644 index 379061d..0000000 --- a/rts/gmp/mpn/vax/addmul_1.s +++ /dev/null @@ -1,126 +0,0 @@ -# VAX __gmpn_addmul_1 -- Multiply a limb vector with a limb and add -# the result to a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_addmul_1 -___gmpn_addmul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - addl2 r2,(r9)+ - adwc $0,r3 -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - addl2 r2,(r9)+ - adwc $0,r3 - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - addl2 r2,(r9)+ - adwc $0,r3 -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - addl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - addl2 r2,(r9)+ - adwc r1,r3 - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - addl2 r10,(r9)+ - adwc r1,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret diff --git a/rts/gmp/mpn/vax/lshift.s b/rts/gmp/mpn/vax/lshift.s deleted file mode 100644 index fd311a9..0000000 --- a/rts/gmp/mpn/vax/lshift.s +++ /dev/null @@ -1,58 +0,0 @@ -# VAX __gmpn_lshift -- left shift. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# rptr (sp + 4) -# sptr (sp + 8) -# size (sp + 12) -# cnt (sp + 16) -# r0=retval r1=size r2,r3=itmp r4,r5=otmp call-used registers -# r6=sptr r7=rptr r8=cnt r9 r10 r11 call-saved registers - -.text - .align 1 -.globl ___gmpn_lshift -___gmpn_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 Lend - -Loop: movl -(r6),r2 - ashq r8,r2,r4 - movl r5,-(r7) - movl r2,r3 - jsobgtr r1,Loop - -Lend: movl r4,-4(r7) - ret diff --git a/rts/gmp/mpn/vax/mul_1.s b/rts/gmp/mpn/vax/mul_1.s deleted file mode 100644 index 708e8ca..0000000 --- a/rts/gmp/mpn/vax/mul_1.s +++ /dev/null @@ -1,123 +0,0 @@ -# VAX __gmpn_mul_1 -- Multiply a limb vector with a limb and store -# the result in a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_mul_1 -___gmpn_mul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - -# One might want to combine the addl2 and the store below, but that -# is actually just slower according to my timing tests. (VAX 3600) - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - movl r2,(r9)+ -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - movl r10,(r9)+ - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - movl r2,(r9)+ - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - movl r10,(r9)+ - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - movl r2,(r9)+ -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - movl r10,(r9)+ - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r1,r3 - addl2 r11,r2 - adwc r6,r3 - movl r2,(r9)+ - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r1,r11 - addl2 r3,r10 - adwc r6,r11 - movl r10,(r9)+ - - sobgtr r7,Loop2 - movl r11,r0 - ret diff --git a/rts/gmp/mpn/vax/rshift.s b/rts/gmp/mpn/vax/rshift.s deleted file mode 100644 index 5158132..0000000 --- a/rts/gmp/mpn/vax/rshift.s +++ /dev/null @@ -1,56 +0,0 @@ -# VAX __gmpn_rshift -- right shift. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# rptr (sp + 4) -# sptr (sp + 8) -# size (sp + 12) -# cnt (sp + 16) -# r0=retval r1=size r2,r3=itmp r4,r5=otmp call-used registers -# r6=sptr r7=rptr r8=cnt r9 r10 r11 call-saved registers - -.text - .align 1 -.globl ___gmpn_rshift -___gmpn_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 Lend - -Loop: movl (r6)+,r3 - ashq r8,r2,r4 - movl r5,(r7)+ - movl r3,r2 - jsobgtr r1,Loop - -Lend: clrl r3 - ashq r8,r2,r4 - movl r5,(r7) - ret diff --git a/rts/gmp/mpn/vax/sub_n.s b/rts/gmp/mpn/vax/sub_n.s deleted file mode 100644 index eff4b1c..0000000 --- a/rts/gmp/mpn/vax/sub_n.s +++ /dev/null @@ -1,61 +0,0 @@ -# VAX __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store -# difference in a third limb vector. - -# Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# s2_ptr (sp + 12) -# size (sp + 16) - -.text - .align 1 -.globl ___gmpn_sub_n -___gmpn_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 # unroll loop count - bicl2 $-4,r5 # mask out low 2 bits - movaq (r5)[r5],r5 # 9x - jmp Loop(r5) - -Loop: 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,Loop - - adwc r0,r0 - ret diff --git a/rts/gmp/mpn/vax/submul_1.s b/rts/gmp/mpn/vax/submul_1.s deleted file mode 100644 index be42286..0000000 --- a/rts/gmp/mpn/vax/submul_1.s +++ /dev/null @@ -1,126 +0,0 @@ -# VAX __gmpn_submul_1 -- Multiply a limb vector with a limb and subtract -# the result from a second limb vector. - -# Copyright (C) 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. - -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. - -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# INPUT PARAMETERS -# res_ptr (sp + 4) -# s1_ptr (sp + 8) -# size (sp + 12) -# s2_limb (sp + 16) - -.text - .align 1 -.globl ___gmpn_submul_1 -___gmpn_submul_1: - .word 0xfc0 - movl 12(ap),r4 - movl 8(ap),r8 - movl 4(ap),r9 - movl 16(ap),r6 - jlss s2_big - - clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L1 - clrl r11 - -# Loop for S2_LIMB < 0x80000000 -Loop1: movl (r8)+,r1 - jlss L1n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc $0,r3 - subl2 r2,(r9)+ - adwc $0,r3 -L1: movl (r8)+,r1 - jlss L1n1 -L1p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc $0,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - -L1n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - subl2 r2,(r9)+ - adwc $0,r3 - movl (r8)+,r1 - jgeq L1p1 -L1n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop1 - movl r11,r0 - ret - - -s2_big: clrl r3 - incl r4 - ashl $-1,r4,r7 - jlbc r4,L2 - clrl r11 - -# Loop for S2_LIMB >= 0x80000000 -Loop2: movl (r8)+,r1 - jlss L2n0 - emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r1,r3 - subl2 r2,(r9)+ - adwc $0,r3 -L2: movl (r8)+,r1 - jlss L2n1 -L2p1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r1,r11 - subl2 r10,(r9)+ - adwc $0,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret - -L2n0: emul r1,r6,$0,r2 - addl2 r11,r2 - adwc r6,r3 - subl2 r2,(r9)+ - adwc r1,r3 - movl (r8)+,r1 - jgeq L2p1 -L2n1: emul r1,r6,$0,r10 - addl2 r3,r10 - adwc r6,r11 - subl2 r10,(r9)+ - adwc r1,r11 - - sobgtr r7,Loop2 - movl r11,r0 - ret diff --git a/rts/gmp/mpn/x86/README b/rts/gmp/mpn/x86/README deleted file mode 100644 index 3507548..0000000 --- a/rts/gmp/mpn/x86/README +++ /dev/null @@ -1,40 +0,0 @@ - - X86 MPN SUBROUTINES - - -This directory contains mpn functions for various 80x86 chips. - - -CODE ORGANIZATION - - x86 i386, i486, generic - 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, K6-2, K6-3 - x86/k6/mmx - x86/k6/k62mmx AMD K6-2 - x86/k7 AMD Athlon - x86/k7/mmx - - -The x86 directory is also the main support for P6 at the moment, and -is something of a blended style, meant to be reasonable on all x86s. - - - -STATUS - -The code is well-optimized for AMD and Intel chips, but not so well -optimized for Cyrix chips. - - - -RELEVANT OPTIMIZATION ISSUES - -For implementations with slow double shift instructions (SHLD and -SHRD), it might be better to mimic their operation with SHL+SHR+OR. -(M2 is likely to benefit from that, but not Pentium due to its slow -plain SHL and SHR.) diff --git a/rts/gmp/mpn/x86/README.family b/rts/gmp/mpn/x86/README.family deleted file mode 100644 index 3bc73f5..0000000 --- a/rts/gmp/mpn/x86/README.family +++ /dev/null @@ -1,333 +0,0 @@ - - X86 CPU FAMILY MPN SUBROUTINES - - -This file has some notes on things common to all the x86 family code. - - - -ASM FILES - -The x86 .asm files are BSD style x86 assembler code, first put through m4 -for macro processing. The generic mpn/asm-defs.m4 is used, together with -mpn/x86/x86-defs.m4. Detailed notes are 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, and with gas freely -available and easy to use that shouldn't be a problem. - - - -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) - -Here PARAM_MULTIPLIER gets defined as `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 register 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 as of 2.9.5 it's the default for GNU/Linux too. - - - -ASSEMBLER COMMENTS - -Solaris "as" doesn't support "#" commenting, using /* */ instead, -unfortunately. For that reason "C" commenting is used (see asm-defs.m4) and -the intermediate ".s" files have no comments. - - - -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 is used to determine whether %cl should be used and -the macros shldl, shrdl, shldw and shrdw in mpn/x86/x86-defs.m4 then pass -through or omit %cl as necessary. See comments with those macros for usage. - - - -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 - -Defining the symbol PIC in m4 processing selects position independent code. -This mainly affects computed jumps, and these are implemented in a -self-contained fashion (without using the global offset table). The few -calls from assembly code to global functions use the normal procedure -linkage table. - -PIC is necessary for ELF shared libraries because they can be mapped into -different processes at different virtual addresses. Text relocations in -shared libraries are allowed, but that presumably means a page with such a -relocation isn't shared. The use of the PLT for PIC adds a fixed cost to -every function call, which is small but might be noticeable when working with -small operands. - -Calls from one library function to another don't need to go through the PLT, -since of course the call instruction uses a displacement, not an absolute -address, and the relative locations of object files are known when libgmp.so -is created. "ld -Bsymbolic" (or "gcc -Wl,-Bsymbolic") will resolve calls -this way, so that there's no jump through the PLT, but of course leaving -setups of the GOT address in %ebx that may be unnecessary. - -The %ebx setup could be avoided in assembly if a separate option controlled -PIC for calls as opposed to computed jumps etc. But there's only ever -likely to be a handful of calls out of assembler, and getting the same -optimization for C intra-library calls would be more important. There seems -no easy way to tell gcc that certain functions can be called non-PIC, and -unfortunately many gmp functions use the global memory allocation variables, -so they need the GOT anyway. Object files with no global data references -and only intra-library calls could go into the library as non-PIC under --Bsymbolic. Integrating this into libtool and automake is left as an -exercise for the reader. - - - -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. - - ifdef(`PIC',` - deflit(UNROLL_THRESHOLD, 10) - ',` - deflit(UNROLL_THRESHOLD, 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 to 3, 1999, -order numbers 243190, 243191 and 243192. Available on-line, - - ftp://download.intel.com/design/PentiumII/manuals/243190.htm - ftp://download.intel.com/design/PentiumII/manuals/243191.htm - ftp://download.intel.com/design/PentiumII/manuals/243192.htm - -"Intel386 Family Binary Compatibility Specification 2", Intel Corporation, -published by McGraw-Hill, 1991, ISBN 0-07-031219-2. - -"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 ELF -shared library PIC coding.) - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/rts/gmp/mpn/x86/addsub_n.S b/rts/gmp/mpn/x86/addsub_n.S deleted file mode 100644 index fe6f648..0000000 --- a/rts/gmp/mpn/x86/addsub_n.S +++ /dev/null @@ -1,174 +0,0 @@ -/* Currently not working and not used. */ - -/* -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - - -#define SAVE_BORROW_RESTORE_CARRY(r) adcl r,r; shll $31,r -#define SAVE_CARRY_RESTORE_BORROW(r) adcl r,r - - .globl mpn_addsub_n_0 - .globl mpn_addsub_n_1 - -/* Cute i386/i486/p6 addsub loop for the "full overlap" case r1==s2,r2==s1. - We let subtraction and addition alternate in being two limbs - ahead of the other, thereby avoiding some SAVE_RESTORE. */ -// r1 = r2 + r1 edi = esi + edi -// r2 = r2 - r1 esi = esi - edi -// s1 s2 -// r2 r1 -// eax,ebx,ecx,edx,esi,edi,ebp -mpn_addsub_n_0: - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp - - movl 20(%esp),%edi /* res_ptr */ - movl 24(%esp),%esi /* s1_ptr */ - movl 36(%esp),%ebp /* size */ - - shrl $2,%ebp - xorl %edx,%edx - .align 4 -Loop0: // L=load E=execute S=store - movl (%esi),%ebx // sub 0 L - movl 4(%esi),%ecx // sub 1 L - sbbl (%edi),%ebx // sub 0 LE - sbbl 4(%edi),%ecx // sub 1 LE -// SAVE_BORROW_RESTORE_CARRY(%edx) - movl (%esi),%eax // add 0 L - adcl %eax,(%edi) // add 0 LES - movl 4(%esi),%eax // add 1 L - adcl %eax,4(%edi) // add 1 LES - movl %ebx,(%esi) // sub 0 S - movl %ecx,4(%esi) // sub 1 S - movl 8(%esi),%ebx // add 2 L - adcl 8(%edi),%ebx // add 2 LE - movl 12(%esi),%ecx // add 3 L - adcl 12(%edi),%ecx // add 3 LE -// SAVE_CARRY_RESTORE_BORROW(%edx) - movl 8(%edi),%eax // sub 2 L - sbbl %eax,8(%esi) // sub 2 LES - movl 12(%edi),%eax // sub 3 L - sbbl %eax,12(%esi) // sub 3 LES - movl %ebx,8(%edi) // add 2 S - movl %ecx,12(%edi) // add 3 S - leal 16(%esi),%esi - leal 16(%edi),%edi - decl %ebp - jnz Loop0 - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -/* Cute i386/i486/p6 addsub loop for the "full overlap" case r1==s1,r2==s2. - We let subtraction and addition alternate in being two limbs - ahead of the other, thereby avoiding some SAVE_RESTORE. */ -// r1 = r1 + r2 edi = edi + esi -// r2 = r1 - r2 esi = edi - esi -// s2 s1 -// r2 r1 -// eax,ebx,ecx,edx,esi,edi,ebp -mpn_addsub_n_1: - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp - - movl 20(%esp),%edi /* res_ptr */ - movl 24(%esp),%esi /* s1_ptr */ - movl 36(%esp),%ebp /* size */ - - shrl $2,%ebp - xorl %edx,%edx - .align 4 -Loop1: // L=load E=execute S=store - movl (%edi),%ebx // sub 0 L - sbbl (%esi),%ebx // sub 0 LE - movl 4(%edi),%ecx // sub 1 L - sbbl 4(%esi),%ecx // sub 1 LE -// SAVE_BORROW_RESTORE_CARRY(%edx) - movl (%esi),%eax // add 0 L - adcl %eax,(%edi) // add 0 LES - movl 4(%esi),%eax // add 1 L - adcl %eax,4(%edi) // add 1 LES - movl %ebx,(%esi) // sub 0 S - movl %ecx,4(%esi) // sub 1 S - movl 8(%esi),%ebx // add 2 L - adcl 8(%edi),%ebx // add 2 LE - movl 12(%esi),%ecx // add 3 L - adcl 12(%edi),%ecx // add 3 LE -// SAVE_CARRY_RESTORE_BORROW(%edx) - movl 8(%edi),%eax // sub 2 L - sbbl 8(%esi),%eax // sub 2 LES - movl %eax,8(%esi) // sub 2 S - movl 12(%edi),%eax // sub 3 L - sbbl 12(%esi),%eax // sub 3 LE - movl %eax,12(%esi) // sub 3 S - movl %ebx,8(%edi) // add 2 S - movl %ecx,12(%edi) // add 3 S - leal 16(%esi),%esi - leal 16(%edi),%edi - decl %ebp - jnz Loop1 - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - - .globl mpn_copy -mpn_copy: - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp - - movl 20(%esp),%edi /* res_ptr */ - movl 24(%esp),%esi /* s1_ptr */ - movl 28(%esp),%ebp /* size */ - - shrl $2,%ebp - .align 4 -Loop2: - movl (%esi),%eax - movl 4(%esi),%ebx - movl %eax,(%edi) - movl %ebx,4(%edi) - movl 8(%esi),%eax - movl 12(%esi),%ebx - movl %eax,8(%edi) - movl %ebx,12(%edi) - leal 16(%esi),%esi - leal 16(%edi),%edi - decl %ebp - jnz Loop2 - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret diff --git a/rts/gmp/mpn/x86/aors_n.asm b/rts/gmp/mpn/x86/aors_n.asm deleted file mode 100644 index 18ef816..0000000 --- a/rts/gmp/mpn/x86/aors_n.asm +++ /dev/null @@ -1,187 +0,0 @@ -dnl x86 mpn_add_n/mpn_sub_n -- mpn addition and subtraction. - -dnl Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 LF(M4_function_n,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 $LF(M4_function_n,oop)-L(0a)-3,%eax - addl $4,%esp -',` - C Calculate start address in loop for non-PIC. - leal LF(M4_function_n,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 $1,%ebp C shift bit 0 into carry - popl %ebp FRAME_popl() - - jmp *%eax C jump into loop - -EPILOGUE() - - - ALIGN(8) -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 $1,%ebp C shift bit 0 into carry - popl %ebp FRAME_popl() - - ALIGN(8) -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/rts/gmp/mpn/x86/aorsmul_1.asm b/rts/gmp/mpn/x86/aorsmul_1.asm deleted file mode 100644 index f32ad83..0000000 --- a/rts/gmp/mpn/x86/aorsmul_1.asm +++ /dev/null @@ -1,134 +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 (C) 1992, 1994, 1997, 1999, 2000 Free Software Foundation, -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/copyd.asm b/rts/gmp/mpn/x86/copyd.asm deleted file mode 100644 index 439640e..0000000 --- a/rts/gmp/mpn/x86/copyd.asm +++ /dev/null @@ -1,80 +0,0 @@ -dnl x86 mpn_copyd -- copy limb vector, decrementing. -dnl -dnl Future: On P6 an MMX loop should be able to go faster than this code. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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. -C -C P5 - 1.0 cycles/limb. -C -C P6 - 2.4 cycles/limb, approx 40 cycles startup. - -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/rts/gmp/mpn/x86/copyi.asm b/rts/gmp/mpn/x86/copyi.asm deleted file mode 100644 index 5bc4e36..0000000 --- a/rts/gmp/mpn/x86/copyi.asm +++ /dev/null @@ -1,79 +0,0 @@ -dnl x86 mpn_copyi -- copy limb vector, incrementing. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 P5 - 1.0 cycles/limb. -C -C P6 - 0.75 cycles/limb. An MMX based copy was tried, but was found to be -C slower than a rep movs in all cases. The fastest MMX found was 0.8 -C cycles/limb (when fully aligned). A rep movs seems to have a startup -C time of about 15 cycles, but doing something special for small sizes -C could lead to a branch misprediction that would destroy any saving. -C For now a plain rep movs seems ok for P6. - -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.family - - rep - movsl - - movl %eax, %esi - movl %edx, %edi - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/diveby3.asm b/rts/gmp/mpn/x86/diveby3.asm deleted file mode 100644 index df879da..0000000 --- a/rts/gmp/mpn/x86/diveby3.asm +++ /dev/null @@ -1,115 +0,0 @@ -dnl x86 mpn_divexact_by3 -- mpn division by 3, expecting no remainder. - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl The following all have their own optimized versions of this routine, -dnl but for reference the code here runs as follows. -dnl -dnl cycles/limb -dnl P54 18.0 -dnl P55 17.0 -dnl P6 14.5 -dnl K6 14.0 -dnl K7 10.0 - - -include(`../config.m4') - - -C mp_limb_t mpn_divexact_by3c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t carry); - -defframe(PARAM_CARRY,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl multiplicative inverse of 3, modulo 2^32 -deflit(INVERSE_3, 0xAAAAAAAB) - -dnl ceil(b/3) and ceil(b*2/3) where b=2^32 -deflit(ONE_THIRD_CEIL, 0x55555556) -deflit(TWO_THIRDS_CEIL, 0xAAAAAAAB) - - .text - ALIGN(8) - -PROLOGUE(mpn_divexact_by3c) -deflit(`FRAME',0) - - movl PARAM_SRC, %ecx - pushl %ebp FRAME_pushl() - - movl PARAM_SIZE, %ebp - pushl %edi FRAME_pushl() - - movl PARAM_DST, %edi - pushl %esi FRAME_pushl() - - movl $INVERSE_3, %esi - pushl %ebx FRAME_pushl() - - leal (%ecx,%ebp,4), %ecx - movl PARAM_CARRY, %ebx - - leal (%edi,%ebp,4), %edi - negl %ebp - - - ALIGN(8) -L(top): - C eax scratch, low product - C ebx carry limb (0 to 3) - C ecx &src[size] - C edx scratch, high product - C esi multiplier - C edi &dst[size] - C ebp counter, limbs, negative - - movl (%ecx,%ebp,4), %eax - - subl %ebx, %eax - - setc %bl - - imull %esi - - cmpl $ONE_THIRD_CEIL, %eax - movl %eax, (%edi,%ebp,4) - - sbbl $-1, %ebx C +1 if eax>=ceil(b/3) - cmpl $TWO_THIRDS_CEIL, %eax - - sbbl $-1, %ebx C +1 if eax>=ceil(b*2/3) - incl %ebp - - jnz L(top) - - - movl %ebx, %eax - popl %ebx - popl %esi - popl %edi - popl %ebp - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/divrem_1.asm b/rts/gmp/mpn/x86/divrem_1.asm deleted file mode 100644 index 12f1467..0000000 --- a/rts/gmp/mpn/x86/divrem_1.asm +++ /dev/null @@ -1,232 +0,0 @@ -dnl x86 mpn_divrem_1 -- mpn by limb division extending to fractional quotient. - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl cycles/limb -dnl K6 20 -dnl P5 44 -dnl P6 39 -dnl 486 approx 43 maybe -dnl -dnl -dnl The following have their own optimized divrem_1 implementations, but -dnl for reference the code here runs as follows. -dnl -dnl cycles/limb -dnl P6MMX 39 -dnl K7 42 - - -include(`../config.m4') - - -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 -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= 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 LF(M4_function_1,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 eliminiate 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 README.family about old gas bugs - leal (%edx,%ecx,1), %edx - addl $L(entry)-L(here), %edx - addl (%esp), %edx - ret -') - - -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/rts/gmp/mpn/x86/k6/cross.pl b/rts/gmp/mpn/x86/k6/cross.pl deleted file mode 100644 index 21734f3..0000000 --- a/rts/gmp/mpn/x86/k6/cross.pl +++ /dev/null @@ -1,141 +0,0 @@ -#! /usr/bin/perl - -# 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 the GNU Lesser General Public License as published -# by the Free Software Foundation; either version 2.1 of the License, or (at -# your option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -# 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. -# -# As far as fixing problems goes, any cache line crossing problems in loops -# get attention, but as a rule it's too tedious to rearrange code or slip in -# nops to fix every problem in setup or finishup code. -# -# 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 mode is easy to avoid when coding. - -use strict; - -sub disassemble { - my ($file) = @_; - my ($addr,$b1,$b2,$b3, $prefix,$opcode,$modrm); - - open (IN, "objdump -Srfh $file |") - || die "Cannot open pipe from objdump\n"; - while () { - print; - - if (/^[ \t]*[0-9]+[ \t]+\.text[ \t]/ && /2\*\*([0-9]+)$/) { - if ($1 < 5) { - print "ZZ need at least 2**5 for predictable cache line crossing\n"; - } - } - - 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\n"; - } - - # with just an opcode, starting 1f mod 20h - if ($addr =~ /[13579bdf]f$/ - && $prefix !~ /0f/ - && $opcode !~ /1[012345]/ # adc - && $opcode !~ /1[89abcd]/ # sbb - && $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 !~ /e[0123]/ # loop/loopz/loopnz/jcxz - && $opcode !~ /e[b9]/ # jmp disp8/disp32 - && $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 ($addr =~ /[13579bdf][f]$/ - && $prefix =~ /0f/) { - print "ZZ ($file) prefix/opcode cross 32-byte boundary\n"; - } - - # with an 0F prefix, anything with mod/rm starting at 1e mod 20h - if ($addr =~ /[13579bdf][e]$/ - && $prefix =~ /0f/ - && $opcode !~ /^8/ # jcond disp32 - && $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/rts/gmp/mpn/x86/k6/diveby3.asm b/rts/gmp/mpn/x86/k6/diveby3.asm deleted file mode 100644 index ffb97bc..0000000 --- a/rts/gmp/mpn/x86/k6/diveby3.asm +++ /dev/null @@ -1,110 +0,0 @@ -dnl AMD K6 mpn_divexact_by3 -- mpn division by 3, expecting no remainder. -dnl -dnl K6: 11.0 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_divexact_by3c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t carry); -C -C Using %esi in (%esi,%ecx,4) or 0(%esi,%ecx,4) addressing modes doesn't -C lead to vector decoding, unlike plain (%esi) does. - -defframe(PARAM_CARRY,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl multiplicative inverse of 3, modulo 2^32 -deflit(INVERSE_3, 0xAAAAAAAB) - - .text - ALIGN(32) - -PROLOGUE(mpn_divexact_by3c) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %esi defframe_pushl(SAVE_ESI) - - movl PARAM_SRC, %esi - pushl %edi defframe_pushl(SAVE_EDI) - - movl PARAM_DST, %edi - pushl %ebx defframe_pushl(SAVE_EBX) - - movl PARAM_CARRY, %ebx - leal (%esi,%ecx,4), %esi - - pushl $3 defframe_pushl(VAR_THREE) - leal (%edi,%ecx,4), %edi - - negl %ecx - - - C Need 32 alignment for claimed speed, to avoid the movl store - C opcode/modrm crossing a cache line boundary - - ALIGN(32) -L(top): - C eax scratch, low product - C ebx carry limb (0 to 3) - C ecx counter, limbs, negative - C edx scratch, high product - C esi &src[size] - C edi &dst[size] - C ebp - C - C The 0(%esi,%ecx,4) form pads so the finishup "movl %ebx, %eax" - C doesn't cross a 32 byte boundary, saving a couple of cycles - C (that's a fixed couple, not per loop). - -Zdisp( movl, 0,(%esi,%ecx,4), %eax) - subl %ebx, %eax - - setc %bl - - imull $INVERSE_3, %eax - - movl %eax, (%edi,%ecx,4) - addl $2, %ecx - - mull VAR_THREE - - addl %edx, %ebx - loop L(top) - - - movl SAVE_ESI, %esi - movl %ebx, %eax - - movl SAVE_EBX, %ebx - - movl SAVE_EDI, %edi - addl $FRAME, %esp - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/gmp-mparam.h b/rts/gmp/mpn/x86/k6/gmp-mparam.h deleted file mode 100644 index 77f3948..0000000 --- a/rts/gmp/mpn/x86/k6/gmp-mparam.h +++ /dev/null @@ -1,97 +0,0 @@ -/* AMD K6 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -#ifndef UMUL_TIME -#define UMUL_TIME 3 /* cycles */ -#endif - -#ifndef UDIV_TIME -#define UDIV_TIME 20 /* cycles */ -#endif - -/* bsfl takes 12-27 cycles, put an average for uniform random numbers */ -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 14 /* cycles */ -#endif - - -/* Generated by tuneup.c, 2000-07-04. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 18 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 130 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 34 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 116 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 68 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 98 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 13 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 67 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 528, 1184, 2176, 5632, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 472 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 4352 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 528, 1184, 2176, 5632, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 544 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 4352 -#endif diff --git a/rts/gmp/mpn/x86/k6/k62mmx/copyd.asm b/rts/gmp/mpn/x86/k6/k62mmx/copyd.asm deleted file mode 100644 index 20a33e6..0000000 --- a/rts/gmp/mpn/x86/k6/k62mmx/copyd.asm +++ /dev/null @@ -1,179 +0,0 @@ -dnl AMD K6-2 mpn_copyd -- copy limb vector, decrementing. -dnl -dnl K6-2: 0.56 or 1.0 cycles/limb (at 32 limbs/loop), depending on data -dnl alignment. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl K6-2 aligned: -dnl UNROLL_COUNT cycles/limb -dnl 8 0.75 -dnl 16 0.625 -dnl 32 0.5625 -dnl 64 0.53 -dnl Maximum possible with the current code is 64, the minimum is 2. - -deflit(UNROLL_COUNT, 32) - - -C void mpn_copyd (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Copy src,size to dst,size, processing limbs from high to low addresses. -C -C The comments in copyi.asm apply here too. - - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - .text - ALIGN(32) - -PROLOGUE(mpn_copyd) - movl PARAM_SIZE, %ecx - movl %esi, %eax - - movl PARAM_SRC, %esi - movl %edi, %edx - - std - - movl PARAM_DST, %edi - cmpl $UNROLL_COUNT, %ecx - - leal -4(%esi,%ecx,4), %esi - - leal -4(%edi,%ecx,4), %edi - ja L(unroll) - -L(simple): - rep - movsl - - cld - - movl %eax, %esi - movl %edx, %edi - - ret - - -L(unroll): - C if src and dst are different alignments mod8, then use rep movs - C if src and dst are both 4mod8 then process one limb to get 0mod8 - - pushl %ebx - leal (%esi,%edi), %ebx - - testb $4, %bl - popl %ebx - - jnz L(simple) - testl $4, %esi - - leal -UNROLL_COUNT(%ecx), %ecx - jnz L(already_aligned) - - movsl - - decl %ecx -L(already_aligned): - - -ifelse(UNROLL_BYTES,256,` - subl $128, %esi - subl $128, %edi -') - - C offset 0x3D here, but gets full speed without further alignment -L(top): - C eax saved esi - C ebx - C ecx counter, limbs - C edx saved edi - C esi src, incrementing - C edi dst, incrementing - C ebp - C - C `disp' is never 0, so don't need to force 0(%esi). - -deflit(CHUNK_COUNT, 2) -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp', eval(-4-i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,+128))) - movq disp(%esi), %mm0 - movq %mm0, disp(%edi) -') - - leal -UNROLL_BYTES(%esi), %esi - subl $UNROLL_COUNT, %ecx - - leal -UNROLL_BYTES(%edi), %edi - jns L(top) - - - C now %ecx is -UNROLL_COUNT to -1 representing repectively 0 to - C UNROLL_COUNT-1 limbs remaining - - testb $eval(UNROLL_COUNT/2), %cl - - leal UNROLL_COUNT(%ecx), %ecx - jz L(not_half) - - - C at an unroll count of 32 this block of code is 16 cycles faster than - C the rep movs, less 3 or 4 to test whether to do it - -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT/2-1, ` - deflit(`disp', eval(-4-i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,+128))) - movq disp(%esi), %mm0 - movq %mm0, disp(%edi) -') - - subl $eval(UNROLL_BYTES/2), %esi - subl $eval(UNROLL_BYTES/2), %edi - - subl $eval(UNROLL_COUNT/2), %ecx -L(not_half): - - -ifelse(UNROLL_BYTES,256,` - addl $128, %esi - addl $128, %edi -') - - rep - movsl - - cld - - movl %eax, %esi - movl %edx, %edi - - femms - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/k62mmx/copyi.asm b/rts/gmp/mpn/x86/k6/k62mmx/copyi.asm deleted file mode 100644 index 215d805..0000000 --- a/rts/gmp/mpn/x86/k6/k62mmx/copyi.asm +++ /dev/null @@ -1,196 +0,0 @@ -dnl AMD K6-2 mpn_copyi -- copy limb vector, incrementing. -dnl -dnl K6-2: 0.56 or 1.0 cycles/limb (at 32 limbs/loop), depending on data -dnl alignment. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl K6-2 aligned: -dnl UNROLL_COUNT cycles/limb -dnl 8 0.75 -dnl 16 0.625 -dnl 32 0.5625 -dnl 64 0.53 -dnl Maximum possible with the current code is 64, the minimum is 2. - -deflit(UNROLL_COUNT, 32) - - -C void mpn_copyi (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The MMX loop is faster than a rep movs when src and dst are both 0mod8. -C With one 0mod8 and one 4mod8 it's 1.056 c/l and the rep movs at 1.0 c/l is -C used instead. -C -C mod8 -C src dst -C 0 0 both aligned, use mmx -C 0 4 unaligned, use rep movs -C 4 0 unaligned, use rep movs -C 4 4 do one movs, then both aligned, use mmx -C -C The MMX code on aligned data is 0.5 c/l, plus loop overhead of 2 -C cycles/loop, which is 0.0625 c/l at 32 limbs/loop. -C -C A pattern of two movq loads and two movq stores (or four and four) was -C tried, but found to be the same speed as just one of each. -C -C Note that this code only suits K6-2 and K6-3. Plain K6 does only one mmx -C instruction per cycle, so "movq"s are no faster than the simple 1 c/l rep -C movs. -C -C Enhancement: -C -C Addressing modes like disp(%esi,%ecx,4) aren't currently used. They'd -C make it possible to avoid incrementing %esi and %edi in the loop and hence -C get loop overhead down to 1 cycle. Care would be needed to avoid bad -C cache line crossings since the "movq"s would then be 5 code bytes rather -C than 4. - - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - - .text - ALIGN(32) - -PROLOGUE(mpn_copyi) - movl PARAM_SIZE, %ecx - movl %esi, %eax - - movl PARAM_SRC, %esi - movl %edi, %edx - - cld - - movl PARAM_DST, %edi - cmpl $UNROLL_COUNT, %ecx - - ja L(unroll) - -L(simple): - rep - movsl - - movl %eax, %esi - movl %edx, %edi - - ret - - -L(unroll): - C if src and dst are different alignments mod8, then use rep movs - C if src and dst are both 4mod8 then process one limb to get 0mod8 - - pushl %ebx - leal (%esi,%edi), %ebx - - testb $4, %bl - popl %ebx - - jnz L(simple) - testl $4, %esi - - leal -UNROLL_COUNT(%ecx), %ecx - jz L(already_aligned) - - decl %ecx - - movsl -L(already_aligned): - - -ifelse(UNROLL_BYTES,256,` - addl $128, %esi - addl $128, %edi -') - - C this is offset 0x34, no alignment needed -L(top): - C eax saved esi - C ebx - C ecx counter, limbs - C edx saved edi - C esi src, incrementing - C edi dst, incrementing - C ebp - C - C Zdisp gets 0(%esi) left that way to avoid vector decode, and with - C 0(%edi) keeps code aligned to 16 byte boundaries. - -deflit(CHUNK_COUNT, 2) -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp', eval(i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,-128))) -Zdisp( movq, disp,(%esi), %mm0) -Zdisp( movq, %mm0, disp,(%edi)) -') - - addl $UNROLL_BYTES, %esi - subl $UNROLL_COUNT, %ecx - - leal UNROLL_BYTES(%edi), %edi - jns L(top) - - - C now %ecx is -UNROLL_COUNT to -1 representing repectively 0 to - C UNROLL_COUNT-1 limbs remaining - - testb $eval(UNROLL_COUNT/2), %cl - - leal UNROLL_COUNT(%ecx), %ecx - jz L(not_half) - - C at an unroll count of 32 this block of code is 16 cycles faster than - C the rep movs, less 3 or 4 to test whether to do it - -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT/2-1, ` - deflit(`disp', eval(i*CHUNK_COUNT*4 ifelse(UNROLL_BYTES,256,-128))) - movq disp(%esi), %mm0 - movq %mm0, disp(%edi) -') - addl $eval(UNROLL_BYTES/2), %esi - addl $eval(UNROLL_BYTES/2), %edi - - subl $eval(UNROLL_COUNT/2), %ecx -L(not_half): - - -ifelse(UNROLL_BYTES,256,` - subl $128, %esi - subl $128, %edi -') - - rep - movsl - - movl %eax, %esi - movl %edx, %edi - - femms - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/k62mmx/lshift.asm b/rts/gmp/mpn/x86/k6/k62mmx/lshift.asm deleted file mode 100644 index f6d54f9..0000000 --- a/rts/gmp/mpn/x86/k6/k62mmx/lshift.asm +++ /dev/null @@ -1,286 +0,0 @@ -dnl AMD K6-2 mpn_lshift -- mpn left shift. -dnl -dnl K6-2: 1.75 cycles/limb - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/k6/k62mmx/rshift.asm b/rts/gmp/mpn/x86/k6/k62mmx/rshift.asm deleted file mode 100644 index 8a8c144..0000000 --- a/rts/gmp/mpn/x86/k6/k62mmx/rshift.asm +++ /dev/null @@ -1,285 +0,0 @@ -dnl AMD K6-2 mpn_rshift -- mpn right shift. -dnl -dnl K6-2: 1.75 cycles/limb - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/k6/mmx/com_n.asm b/rts/gmp/mpn/x86/k6/mmx/com_n.asm deleted file mode 100644 index 8915080..0000000 --- a/rts/gmp/mpn/x86/k6/mmx/com_n.asm +++ /dev/null @@ -1,91 +0,0 @@ -dnl AMD K6-2 mpn_com_n -- mpn bitwise one's complement. -dnl -dnl alignment dst/src, A=0mod8 N=4mod8 -dnl A/A A/N N/A N/N -dnl K6-2 1.0 1.18 1.18 1.18 cycles/limb -dnl K6 1.5 1.85 1.75 1.85 - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C void mpn_com_n (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(32) -PROLOGUE(mpn_com_n) -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 %eax - movl %eax, (%edx) - ret - - -L(two_or_more): - pushl %ebx -FRAME_pushl() - movl %ecx, %ebx - - pcmpeqd %mm7, %mm7 C all ones - - - ALIGN(16) -L(top): - C eax src - C ebx floor(size/2) - C ecx counter - C edx dst - C esi - C edi - C ebp - - 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 %eax - movl %eax, (%edx,%ebx,8) -L(no_extra): - - popl %ebx - emms_or_femms - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/mmx/logops_n.asm b/rts/gmp/mpn/x86/k6/mmx/logops_n.asm deleted file mode 100644 index 46cb3b7..0000000 --- a/rts/gmp/mpn/x86/k6/mmx/logops_n.asm +++ /dev/null @@ -1,212 +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 -dnl alignment dst/src1/src2, A=0mod8, N=4mod8 -dnl A/A/A A/A/N A/N/A A/N/N N/A/A N/A/N N/N/A N/N/N -dnl -dnl K6-2 1.2 1.5 1.5 1.2 1.2 1.5 1.5 1.2 and,andn,ior,xor -dnl K6-2 1.5 1.75 2.0 1.75 1.75 2.0 1.75 1.5 iorn,xnor -dnl K6-2 1.75 2.0 2.0 2.0 2.0 2.0 2.0 1.75 nand,nior -dnl -dnl K6 1.5 1.68 1.75 1.2 1.75 1.75 1.68 1.5 and,andn,ior,xor -dnl K6 2.0 2.0 2.25 2.25 2.25 2.25 2.0 2.0 iorn,xnor -dnl K6 2.0 2.25 2.25 2.25 2.25 2.25 2.25 2.0 nand,nior - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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). - -M4_choose_op( and_n, pand,0,0, andl,0,0) -M4_choose_op( andn_n, pandn,0,0, 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 %ecx') - M4_i (%eax), %ecx -ifelse(M4_i_neg_dst,1,` notl %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 - C - C carry bit is low of size - - pushl %esi - FRAME_pushl() - testl $4, %eax - jz L(alignment_ok) - - movl (%ebx), %esi - addl $4, %ebx -ifelse(M4_i_neg_src2,1,`notl %esi') - M4_i (%eax), %esi - addl $4, %eax -ifelse(M4_i_neg_dst,1,` notl %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 %ecx') - M4_i (%eax), %ecx -ifelse(M4_i_neg_dst,1,` notl %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 -') - - 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 %ebx') - M4_i -4(%eax,%esi,4), %ebx -ifelse(M4_i_neg_dst,1,` notl %ebx') - movl %ebx, -4(%edx,%esi,4) -L(no_extra): - - popl %esi - popl %ebx - emms_or_femms - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/mmx/lshift.asm b/rts/gmp/mpn/x86/k6/mmx/lshift.asm deleted file mode 100644 index f1dc83d..0000000 --- a/rts/gmp/mpn/x86/k6/mmx/lshift.asm +++ /dev/null @@ -1,122 +0,0 @@ -dnl AMD K6 mpn_lshift -- mpn left shift. -dnl -dnl K6: 3.0 cycles/limb - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/k6/mmx/popham.asm b/rts/gmp/mpn/x86/k6/mmx/popham.asm deleted file mode 100644 index 2c61925..0000000 --- a/rts/gmp/mpn/x86/k6/mmx/popham.asm +++ /dev/null @@ -1,238 +0,0 @@ -dnl AMD K6-2 mpn_popcount, mpn_hamdist -- mpn bit population count and -dnl hamming distance. -dnl -dnl popcount hamdist -dnl K6-2: 9.0 11.5 cycles/limb -dnl K6: 12.5 13.0 - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 - - DATA - ALIGN(8) - -define(LS, -m4_assert_numargs(1) -`LF(M4_function,`$1')') - -LS(rodata_AAAAAAAAAAAAAAAA): - .long 0xAAAAAAAA - .long 0xAAAAAAAA - -LS(rodata_3333333333333333): - .long 0x33333333 - .long 0x33333333 - -LS(rodata_0F0F0F0F0F0F0F0F): - .long 0x0F0F0F0F - .long 0x0F0F0F0F - -LS(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 - orl %ecx, %ecx - jz L(zero) - -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 LS(rodata_AAAAAAAAAAAAAAAA), %mm7 - movq LS(rodata_3333333333333333), %mm6 - movq LS(rodata_0F0F0F0F0F0F0F0F), %mm5 - movq LS(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 - -L(zero): - movl $0, %eax - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k6/mmx/rshift.asm b/rts/gmp/mpn/x86/k6/mmx/rshift.asm deleted file mode 100644 index cc5948f..0000000 --- a/rts/gmp/mpn/x86/k6/mmx/rshift.asm +++ /dev/null @@ -1,122 +0,0 @@ -dnl AMD K6 mpn_rshift -- mpn right shift. -dnl -dnl K6: 3.0 cycles/limb - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/k6/mul_1.asm b/rts/gmp/mpn/x86/k6/mul_1.asm deleted file mode 100644 index c2220fe..0000000 --- a/rts/gmp/mpn/x86/k6/mul_1.asm +++ /dev/null @@ -1,272 +0,0 @@ -dnl AMD K6 mpn_mul_1 -- mpn by limb multiply. -dnl -dnl K6: 6.25 cycles/limb. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 LF(mpn_mul_1,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/rts/gmp/mpn/x86/k6/mul_basecase.asm b/rts/gmp/mpn/x86/k6/mul_basecase.asm deleted file mode 100644 index 1f5a3a4..0000000 --- a/rts/gmp/mpn/x86/k6/mul_basecase.asm +++ /dev/null @@ -1,600 +0,0 @@ -dnl AMD K6 mpn_mul_basecase -- multiply two mpn numbers. -dnl -dnl K6: approx 9.0 cycles per cross product on 30x30 limbs (with 16 limbs/loop -dnl unrolling). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 Future: -C -C The unrolled loop could be shared by mpn_addmul_1, with some extra stack -C setups and maybe 2 or 3 wasted cycles at the end. Code saving would be -C 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 README.family about old gas bugs - leal (%ecx,%esi,1), %ecx - addl $L(unroll_entry)-L(unroll_here), %ecx - addl (%esp), %ecx - ret -') - - -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/rts/gmp/mpn/x86/k6/sqr_basecase.asm b/rts/gmp/mpn/x86/k6/sqr_basecase.asm deleted file mode 100644 index 70d49b3..0000000 --- a/rts/gmp/mpn/x86/k6/sqr_basecase.asm +++ /dev/null @@ -1,672 +0,0 @@ -dnl AMD K6 mpn_sqr_basecase -- square an mpn number. -dnl -dnl K6: approx 4.7 cycles per cross product, or 9.2 cycles per triangular -dnl product (measured on the speed difference between 17 and 33 limbs, -dnl which is roughly the Karatsuba recursing range). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl KARATSUBA_SQR_THRESHOLD_MAX is the maximum KARATSUBA_SQR_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 KARATSUBA_SQR_THRESHOLD of 66. - -deflit(KARATSUBA_SQR_THRESHOLD_MAX, 66) - - -dnl Allow a value from the tune program to override config.m4. - -ifdef(`KARATSUBA_SQR_THRESHOLD_OVERRIDE', -`define(`KARATSUBA_SQR_THRESHOLD',KARATSUBA_SQR_THRESHOLD_OVERRIDE)') - - -dnl UNROLL_COUNT is the number of code chunks in the unrolled addmul. The -dnl number required is determined by KARATSUBA_SQR_THRESHOLD, since -dnl mpn_sqr_basecase only needs to handle sizes < KARATSUBA_SQR_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 KARATSUBA_SQR_THRESHOLD-1 -dnl limbs, UNROLL_COUNT needs to be KARATSUBA_SQR_THRESHOLD-3. - -m4_config_gmp_mparam(`KARATSUBA_SQR_THRESHOLD') -deflit(UNROLL_COUNT, eval(KARATSUBA_SQR_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 README.family 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 -') - - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/README b/rts/gmp/mpn/x86/k7/README deleted file mode 100644 index c34315c..0000000 --- a/rts/gmp/mpn/x86/k7/README +++ /dev/null @@ -1,145 +0,0 @@ - - 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_popcount 5.0 - mpn_hamdist 6.0 - -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 E, November 1999. Available on-line, - - http://www.amd.com/products/cpg/athlon/techdocs/pdf/22007.pdf - -"3DNow Technology Manual", AMD publication number 21928F/0-August 1999. -This describes the femms and prefetch instructions. Available on-line, - - http://www.amd.com/K6/k6docs/pdf/21928.pdf - -"AMD Extensions to the 3DNow and MMX Instruction Sets Manual", AMD -publication number 22466, revision B, August 1999. This describes -instructions added in the Athlon processor, such as pswapd and the extra -prefetch forms. Available on-line, - - http://www.amd.com/products/cpg/athlon/techdocs/pdf/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/products/cpg/athlon/techdocs/pdf/22621.pdf - - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/rts/gmp/mpn/x86/k7/aors_n.asm b/rts/gmp/mpn/x86/k7/aors_n.asm deleted file mode 100644 index 85fa9d3..0000000 --- a/rts/gmp/mpn/x86/k7/aors_n.asm +++ /dev/null @@ -1,250 +0,0 @@ -dnl AMD K7 mpn_add_n/mpn_sub_n -- mpn add or subtract. -dnl -dnl K7: 1.64 cycles/limb (at 16 limb/loop). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 is probably the best possible -C with plain integer operations. Each limb is 2 loads and 1 store, and in -C one cycle the K7 can do two loads, or a load and a store, leading to 1.5 -C 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 LF(M4_function_n,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 README.family about old gas bugs - leal (%edi,%edi,8), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - ret -') - - -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/rts/gmp/mpn/x86/k7/aorsmul_1.asm b/rts/gmp/mpn/x86/k7/aorsmul_1.asm deleted file mode 100644 index 9f9c3da..0000000 --- a/rts/gmp/mpn/x86/k7/aorsmul_1.asm +++ /dev/null @@ -1,364 +0,0 @@ -dnl AMD K7 mpn_addmul_1/mpn_submul_1 -- add or subtract mpn multiple. -dnl -dnl K7: 3.9 cycles/limb. -dnl -dnl Future: It should be possible to avoid the separate mul after the -dnl unrolled loop by moving the movl/adcl to the top. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl K7: UNROLL_COUNT cycles/limb -dnl 4 4.42 -dnl 8 4.16 -dnl 16 3.9 -dnl 32 3.9 -dnl 64 3.87 -dnl Maximum possible with the current code is 64. - -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) - define(M4_description, add it to) - define(M4_desc_retval, carry) -',`ifdef(`OPERATION_submul_1',` - define(M4_inst, subl) - define(M4_function_1, mpn_submul_1) - define(M4_function_1c, mpn_submul_1c) - define(M4_description, subtract it from) - define(M4_desc_retval, borrow) -',`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 M4_function_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult); -C mp_limb_t M4_function_1c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult, mp_limb_t carry); -C -C Calculate src,size multiplied by mult and M4_description dst,size. -C Return the M4_desc_retval limb from the top of the result. - -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) -deflit(`FRAME',0) - -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -deflit(SAVE_SIZE, 16) - - .text - ALIGN(32) -PROLOGUE(M4_function_1) - movl PARAM_SIZE, %edx - movl PARAM_SRC, %eax - xorl %ecx, %ecx - - decl %edx - jnz LF(M4_function_1c,start_1) - - movl (%eax), %eax - movl PARAM_DST, %ecx - - mull PARAM_MULTIPLIER - - M4_inst %eax, (%ecx) - adcl $0, %edx - movl %edx, %eax - - ret -EPILOGUE() - - ALIGN(16) -PROLOGUE(M4_function_1c) - movl PARAM_SIZE, %edx - movl PARAM_SRC, %eax - - decl %edx - jnz L(more_than_one_limb) - - movl (%eax), %eax - movl PARAM_DST, %ecx - - mull PARAM_MULTIPLIER - - addl PARAM_CARRY, %eax - - adcl $0, %edx - M4_inst %eax, (%ecx) - - adcl $0, %edx - movl %edx, %eax - - ret - - - C offset 0x44 so close enough to aligned -L(more_than_one_limb): - movl PARAM_CARRY, %ecx -L(start_1): - C eax src - C ecx initial carry - C edx size-1 - subl $SAVE_SIZE, %esp -deflit(`FRAME',16) - - movl %ebx, SAVE_EBX - movl %esi, SAVE_ESI - movl %edx, %ebx C size-1 - - movl PARAM_SRC, %esi - movl %ebp, SAVE_EBP - cmpl $UNROLL_THRESHOLD, %edx - - movl PARAM_MULTIPLIER, %ebp - movl %edi, SAVE_EDI - - movl (%esi), %eax C src low limb - movl PARAM_DST, %edi - ja L(unroll) - - - C simple loop - - leal 4(%esi,%ebx,4), %esi C point one limb past last - leal (%edi,%ebx,4), %edi C point at last limb - negl %ebx - - C The movl to load the next source limb is done well ahead of the - C mul. This is necessary for full speed, and leads to one limb - C handled separately at the end. - -L(simple): - C eax src limb - C ebx loop counter - C ecx carry limb - C edx scratch - C esi src - C edi dst - C ebp multiplier - - mull %ebp - - addl %eax, %ecx - adcl $0, %edx - - M4_inst %ecx, (%edi,%ebx,4) - movl (%esi,%ebx,4), %eax - adcl $0, %edx - - incl %ebx - movl %edx, %ecx - jnz L(simple) - - - mull %ebp - - movl SAVE_EBX, %ebx - movl SAVE_ESI, %esi - movl SAVE_EBP, %ebp - - addl %eax, %ecx - adcl $0, %edx - - M4_inst %ecx, (%edi) - adcl $0, %edx - movl SAVE_EDI, %edi - - addl $SAVE_SIZE, %esp - movl %edx, %eax - ret - - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll): - C eax src low limb - C ebx size-1 - C ecx carry - C edx size-1 - C esi src - C edi dst - C ebp multiplier - -dnl overlapping with parameters no longer needed -define(VAR_COUNTER,`PARAM_SIZE') -define(VAR_JUMP, `PARAM_MULTIPLIER') - - subl $2, %ebx C (size-2)-1 - decl %edx C size-2 - - shrl $UNROLL_LOG2, %ebx - negl %edx - - movl %ebx, VAR_COUNTER - andl $UNROLL_MASK, %edx - - movl %edx, %ebx - shll $4, %edx - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(entry) (%edx,%ebx,1), %edx -') - negl %ebx - movl %edx, VAR_JUMP - - mull %ebp - - addl %eax, %ecx C initial carry, becomes low carry - adcl $0, %edx - testb $1, %bl - - movl 4(%esi), %eax C src second limb - leal ifelse(UNROLL_BYTES,256,128+) 8(%esi,%ebx,4), %esi - leal ifelse(UNROLL_BYTES,256,128) (%edi,%ebx,4), %edi - - movl %edx, %ebx C high carry - cmovnz( %ecx, %ebx) C high,low carry other way around - cmovnz( %edx, %ecx) - - jmp *VAR_JUMP - - -ifdef(`PIC',` -L(pic_calc): - C See README.family about old gas bugs - leal (%edx,%ebx,1), %edx - addl $L(entry)-L(here), %edx - addl (%esp), %edx - ret -') - - -C ----------------------------------------------------------------------------- -C This code uses a "two carry limbs" scheme. At the top of the loop the -C carries are ebx=lo, ecx=hi, then they swap for each limb processed. For -C the computed jump an odd size means they start one way around, an even -C size the other. Either way one limb is handled separately at the start of -C the loop. -C -C The positioning of the movl to load the next source limb is important. -C Moving it after the adcl with a view to avoiding a separate mul at the end -C of the loop slows the code down. - - ALIGN(32) -L(top): - C eax src limb - C ebx carry high - C ecx carry low - C edx scratch - C esi src+8 - C edi dst - C ebp multiplier - C - C VAR_COUNTER loop counter - C - C 17 bytes each limb - -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)) - - mull %ebp - -Zdisp( M4_inst,%ecx, disp0,(%edi)) - movl $0, %ecx - - adcl %eax, %ebx - -Zdisp( movl, disp0,(%esi), %eax) - adcl %edx, %ecx - - - mull %ebp - - M4_inst %ebx, disp1(%edi) - movl $0, %ebx - - adcl %eax, %ecx - - movl disp1(%esi), %eax - adcl %edx, %ebx -') - - decl VAR_COUNTER - leal UNROLL_BYTES(%esi), %esi - leal UNROLL_BYTES(%edi), %edi - - jns L(top) - - - C eax src limb - C ebx carry high - C ecx carry low - C edx - C esi - C edi dst (points at second last limb) - C ebp multiplier -deflit(`disp0', ifelse(UNROLL_BYTES,256,-128)) -deflit(`disp1', eval(disp0-0 + 4)) - - mull %ebp - - M4_inst %ecx, disp0(%edi) - movl SAVE_EBP, %ebp - - adcl %ebx, %eax - movl SAVE_EBX, %ebx - movl SAVE_ESI, %esi - - adcl $0, %edx - M4_inst %eax, disp1(%edi) - movl SAVE_EDI, %edi - - adcl $0, %edx - addl $SAVE_SIZE, %esp - - movl %edx, %eax - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/diveby3.asm b/rts/gmp/mpn/x86/k7/diveby3.asm deleted file mode 100644 index 5768495..0000000 --- a/rts/gmp/mpn/x86/k7/diveby3.asm +++ /dev/null @@ -1,131 +0,0 @@ -dnl AMD K7 mpn_divexact_by3 -- mpn division by 3, expecting no remainder. -dnl -dnl K7: 8.0 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_divexact_by3c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t carry); - -defframe(PARAM_CARRY,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl multiplicative inverse of 3, modulo 2^32 -deflit(INVERSE_3, 0xAAAAAAAB) - -dnl ceil(b/3) and floor(b*2/3) where b=2^32 -deflit(ONE_THIRD_CEIL, 0x55555556) -deflit(TWO_THIRDS_FLOOR, 0xAAAAAAAA) - - .text - ALIGN(32) - -PROLOGUE(mpn_divexact_by3c) -deflit(`FRAME',0) - - movl PARAM_SRC, %ecx - pushl %ebx defframe_pushl(SAVE_EBX) - - movl PARAM_CARRY, %ebx - pushl %ebp defframe_pushl(SAVE_EBP) - - movl PARAM_SIZE, %ebp - pushl %edi defframe_pushl(SAVE_EDI) - - movl (%ecx), %eax C src low limb - pushl %esi defframe_pushl(SAVE_ESI) - - movl PARAM_DST, %edi - movl $TWO_THIRDS_FLOOR, %esi - leal -4(%ecx,%ebp,4), %ecx C &src[size-1] - - subl %ebx, %eax - - setc %bl - decl %ebp - jz L(last) - - leal (%edi,%ebp,4), %edi C &dst[size-1] - negl %ebp - - - ALIGN(16) -L(top): - C eax src limb, carry subtracted - C ebx carry limb (0 or 1) - C ecx &src[size-1] - C edx scratch - C esi TWO_THIRDS_FLOOR - C edi &dst[size-1] - C ebp counter, limbs, negative - - imull $INVERSE_3, %eax, %edx - - movl 4(%ecx,%ebp,4), %eax C next src limb - cmpl $ONE_THIRD_CEIL, %edx - - sbbl $-1, %ebx C +1 if result>=ceil(b/3) - cmpl %edx, %esi - - sbbl %ebx, %eax C and further 1 if result>=ceil(b*2/3) - movl %edx, (%edi,%ebp,4) - incl %ebp - - setc %bl C new carry - jnz L(top) - - - -L(last): - C eax src limb, carry subtracted - C ebx carry limb (0 or 1) - C ecx &src[size-1] - C edx scratch - C esi multiplier - C edi &dst[size-1] - C ebp - - imull $INVERSE_3, %eax - - cmpl $ONE_THIRD_CEIL, %eax - movl %eax, (%edi) - movl SAVE_EBP, %ebp - - sbbl $-1, %ebx C +1 if eax>=ceil(b/3) - cmpl %eax, %esi - movl $0, %eax - - adcl %ebx, %eax C further +1 if eax>=ceil(b*2/3) - movl SAVE_EDI, %edi - movl SAVE_ESI, %esi - - movl SAVE_EBX, %ebx - addl $FRAME, %esp - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/gmp-mparam.h b/rts/gmp/mpn/x86/k7/gmp-mparam.h deleted file mode 100644 index c3bba0a..0000000 --- a/rts/gmp/mpn/x86/k7/gmp-mparam.h +++ /dev/null @@ -1,100 +0,0 @@ -/* AMD K7 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -/* the low limb is ready after 4 cycles, but normally it's the high limb - which is of interest, and that comes out after 6 cycles */ -#ifndef UMUL_TIME -#define UMUL_TIME 6 /* cycles */ -#endif - -/* AMD doco says 40, but it measures 39 back-to-back */ -#ifndef UDIV_TIME -#define UDIV_TIME 39 /* cycles */ -#endif - -/* using bsf */ -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 7 /* cycles */ -#endif - - -/* Generated by tuneup.c, 2000-07-06. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 26 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 177 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 52 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 173 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 76 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 114 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 34 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 5 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 54 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 720, 1440, 2944, 7680, 18432, 57344, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 736 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 6912 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 784, 1696, 3200, 7680, 18432, 57344, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 800 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 8448 -#endif diff --git a/rts/gmp/mpn/x86/k7/mmx/copyd.asm b/rts/gmp/mpn/x86/k7/mmx/copyd.asm deleted file mode 100644 index 33214da..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/copyd.asm +++ /dev/null @@ -1,136 +0,0 @@ -dnl AMD K7 mpn_copyd -- copy limb vector, decrementing. -dnl -dnl alignment dst/src, A=0mod8 N=4mod8 -dnl A/A A/N N/A N/N -dnl K7 0.75 1.0 1.0 0.75 - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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/rts/gmp/mpn/x86/k7/mmx/copyi.asm b/rts/gmp/mpn/x86/k7/mmx/copyi.asm deleted file mode 100644 index b234a16..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/copyi.asm +++ /dev/null @@ -1,147 +0,0 @@ -dnl AMD K7 mpn_copyi -- copy limb vector, incrementing. -dnl -dnl alignment dst/src, A=0mod8 N=4mod8 -dnl A/A A/N N/A N/N -dnl K7 0.75 1.0 1.0 0.75 - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 two loads, or two stores, or a load and a store, in one -C cycle, so if those are 64-bit operations then 0.5 c/l should be possible, -C however nothing under 0.7 c/l is known. -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/rts/gmp/mpn/x86/k7/mmx/divrem_1.asm b/rts/gmp/mpn/x86/k7/mmx/divrem_1.asm deleted file mode 100644 index 483ad6a..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/divrem_1.asm +++ /dev/null @@ -1,718 +0,0 @@ -dnl AMD K7 mpn_divrem_1 -- mpn by limb division. -dnl -dnl K7: 17.0 cycles/limb integer part, 15.0 cycles/limb fraction part. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 -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 mpn_divrem_1 avoids one division if the src high limb is less than the -C divisor. mpn_divrem_1c doesn't check for a zero carry, since in normal -C circumstances that will be a very rare event. -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. - - -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_CARRY, 24) -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_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 - jmp LF(mpn_divrem_1,start_1c) - -EPILOGUE() - - - C offset 0x31, 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 %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %ebx, SAVE_EBX - movl PARAM_XSIZE, %ebx - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - orl %ecx, %ecx - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - leal -4(%edi,%ebx,4), %edi C &dst[xsize-1] - - jz L(no_skip_div) - movl -4(%esi,%ecx,4), %eax C src high limb - - cmpl %ebp, %eax C one less div if high=MUL_THRESHOLD, so with size==0 then - C must have xsize!=0 - 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 occurrances 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<<32 + m*(n2+n1)) - 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 mm0 src limb, shifted - 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<<32 + m*(n2+n1)) - 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 mm0 src limb, shifted - 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<<32 + m*(n2+n1)) - 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 - 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 - movl %edi, %eax - - subl $8, %ecx - - 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/rts/gmp/mpn/x86/k7/mmx/lshift.asm b/rts/gmp/mpn/x86/k7/mmx/lshift.asm deleted file mode 100644 index 4d17c88..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/lshift.asm +++ /dev/null @@ -1,472 +0,0 @@ -dnl AMD K7 mpn_lshift -- mpn left shift. -dnl -dnl K7: 1.21 cycles/limb (at 16 limbs/loop). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 README.family about old gas bugs - leal (%eax,%eax,4), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - - ret -') - - -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)) - - movq disp0(%edx), %mm0 - psllq %mm6, %mm2 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - por %mm2, %mm0 - movq %mm0, disp0(%edi) - - - movq disp1(%edx), %mm0 - psllq %mm6, %mm1 - - movq %mm0, %mm2 - psrlq %mm7, %mm0 - - por %mm1, %mm0 - 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/rts/gmp/mpn/x86/k7/mmx/mod_1.asm b/rts/gmp/mpn/x86/k7/mmx/mod_1.asm deleted file mode 100644 index 545ca56..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/mod_1.asm +++ /dev/null @@ -1,457 +0,0 @@ -dnl AMD K7 mpn_mod_1 -- mpn by limb remainder. -dnl -dnl K7: 17.0 cycles/limb. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_mod_1 (mp_srcptr src, mp_size_t size, mp_limb_t divisor); -C mp_limb_t mpn_mod_1c (mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t carry); -C -C The code here is the same as mpn_divrem_1, but with the quotient -C discarded. See mpn/x86/k7/mmx/divrem_1.c for some comments. - - -dnl MUL_THRESHOLD is the size at which the multiply by inverse method is -dnl used, rather than plain "divl"s. Minimum value 2. -dnl -dnl The inverse takes about 50 cycles to calculate, but after that the -dnl multiply is 17 c/l versus division at 41 c/l. -dnl -dnl Using mul or div is about the same speed at 3 limbs, so the threshold -dnl is set to 4 to get the smaller div code used at 3. - -deflit(MUL_THRESHOLD, 4) - - -defframe(PARAM_CARRY, 16) -defframe(PARAM_DIVISOR,12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 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_STOP,-28) - -deflit(STACK_SPACE, 28) - - .text - ALIGN(32) - -PROLOGUE(mpn_mod_1c) -deflit(`FRAME',0) - movl PARAM_CARRY, %edx - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - jmp LF(mpn_mod_1,start_1c) - -EPILOGUE() - - - ALIGN(32) -PROLOGUE(mpn_mod_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 %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - orl %ecx, %ecx - jz L(divide_done) - - movl -4(%esi,%ecx,4), %eax C src high limb - - cmpl %ebp, %eax C carry flag if high n2 - leal (%ebp,%esi), %edx - - movd %mm0, %esi - - cmovc( %edx, %edi) C n - q1*d if underflow from using q1+1 - cmpl %eax, %ecx - jne L(inverse_top) - - -L(inverse_loop_done): - - -C ----------------------------------------------------------------------------- - -L(inverse_two_left): - C eax scratch - C ebx scratch (nadj, q1) - C ecx &src[-1] - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 scratch (src dword) - C mm7 rshift - - 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) - - movd 4(%ecx), %mm0 C src low limb - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - 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 - - -C One limb left - - C eax scratch - C ebx scratch (nadj, q1) - C ecx - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 src limb, shifted - C mm7 rshift - - 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) - - movl VAR_NORM, %ecx C for final denorm - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - movl %ebp, %eax C d - - C - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - - sbbl $0, %ebx - - mull %ebx C (q1+1)*d - - movl SAVE_EBX, %ebx - - C - - C - - subl %eax, %esi - - movl %esi, %eax C remainder - movl SAVE_ESI, %esi - - sbbl %edx, %edi C n - (q1+1)*d - leal (%ebp,%eax), %edx - movl SAVE_EBP, %ebp - - cmovc( %edx, %eax) C n - q1*d if underflow from using q1+1 - movl SAVE_EDI, %edi - - shrl %cl, %eax C denorm remainder - addl $STACK_SPACE, %esp - 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 src pointer - C edx - C esi n10 - C edi (n2) - C ebp divisor - - movl VAR_SRC_STOP, %edx - leal (%ebp,%esi), %edi C n-q*d remainder -> next n2 - psrlq %mm7, %mm0 - - movd %mm0, %esi C next n10 - - cmpl %ecx, %edx - jne L(inverse_top) - jmp L(inverse_loop_done) - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/mmx/popham.asm b/rts/gmp/mpn/x86/k7/mmx/popham.asm deleted file mode 100644 index fa7c8c0..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/popham.asm +++ /dev/null @@ -1,239 +0,0 @@ -dnl AMD K7 mpn_popcount, mpn_hamdist -- population count and hamming -dnl distance. -dnl -dnl K7: popcount 5.0 cycles/limb, hamdist 6.0 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl Only recent versions of gas know psadbw, in particular gas 2.9.1 on -dnl FreeBSD 3.3 and 3.4 doesn't recognise it. - -define(psadbw_mm4_mm0, -`ifelse(m4_ifdef_anyof_p(`HAVE_TARGET_CPU_athlon', - `HAVE_TARGET_CPU_pentium3'),1, - `.byte 0x0f,0xf6,0xc4 C psadbw %mm4, %mm0', - -`m4_warning(`warning, using simulated and only partly functional psadbw, use for testing only -') C this works enough for the sum of bytes done below, making it - C possible to test on an older cpu - leal -8(%esp), %esp - movq %mm4, (%esp) - movq %mm0, %mm4 -forloop(i,1,7, -` psrlq $ 8, %mm4 - paddb %mm4, %mm0 -') - pushl $ 0 - pushl $ 0xFF - pand (%esp), %mm0 - movq 8(%esp), %mm4 - leal 16(%esp), %esp -')') - - -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 - - DATA - ALIGN(8) - -define(LS, -m4_assert_numargs(1) -`LF(M4_function,`$1')') - -LS(rodata_AAAAAAAAAAAAAAAA): - .long 0xAAAAAAAA - .long 0xAAAAAAAA - -LS(rodata_3333333333333333): - .long 0x33333333 - .long 0x33333333 - -LS(rodata_0F0F0F0F0F0F0F0F): - .long 0x0F0F0F0F - .long 0x0F0F0F0F -') - - .text - ALIGN(32) - -PROLOGUE(M4_function) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - orl %ecx, %ecx - jz L(zero) - -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 LS(rodata_AAAAAAAAAAAAAAAA), %mm7 - movq LS(rodata_3333333333333333), %mm6 - movq LS(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 0(%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 - - -L(zero): - movl $0, %eax - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/mmx/rshift.asm b/rts/gmp/mpn/x86/k7/mmx/rshift.asm deleted file mode 100644 index abb546c..0000000 --- a/rts/gmp/mpn/x86/k7/mmx/rshift.asm +++ /dev/null @@ -1,471 +0,0 @@ -dnl AMD K7 mpn_rshift -- mpn right shift. -dnl -dnl K7: 1.21 cycles/limb (at 16 limbs/loop). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 README.family about old gas bugs - leal (%eax,%eax,4), %esi - addl $L(entry)-L(here), %esi - addl (%esp), %esi - negl %eax - - ret -') - - -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)) - - movq disp0(%edx), %mm0 - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - por %mm2, %mm0 - movq %mm0, disp0(%edi) - - - movq disp1(%edx), %mm0 - psrlq %mm6, %mm1 - - movq %mm0, %mm2 - psllq %mm7, %mm0 - - por %mm1, %mm0 - 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/rts/gmp/mpn/x86/k7/mul_1.asm b/rts/gmp/mpn/x86/k7/mul_1.asm deleted file mode 100644 index 07f7085..0000000 --- a/rts/gmp/mpn/x86/k7/mul_1.asm +++ /dev/null @@ -1,265 +0,0 @@ -dnl AMD K7 mpn_mul_1 -- mpn by limb multiply. -dnl -dnl K7: 3.4 cycles/limb (at 16 limbs/loop). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl K7: UNROLL_COUNT cycles/limb -dnl 8 3.9 -dnl 16 3.4 -dnl 32 3.4 -dnl 64 3.35 -dnl Maximum possible with the current code is 64. - -deflit(UNROLL_COUNT, 16) - - -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 destination. -C -C Variations on the unrolled loop have been tried, with the current -C registers or with the counter on the stack to free up ecx. The current -C code is the fastest found. -C -C An interesting effect is that removing the stores "movl %ebx, disp0(%edi)" -C from the unrolled loop actually slows it down to 5.0 cycles/limb. Code -C with this change can be tested on sizes of the form UNROLL_COUNT*n+1 -C without having to change the computed jump. There's obviously something -C fishy going on, perhaps with what execution units the mul needs. - -defframe(PARAM_CARRY, 20) -defframe(PARAM_MULTIPLIER,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -defframe(SAVE_EBP, -4) -defframe(SAVE_EDI, -8) -defframe(SAVE_ESI, -12) -defframe(SAVE_EBX, -16) -deflit(STACK_SPACE, 16) - -dnl Must have UNROLL_THRESHOLD >= 2, since the unrolled loop can't handle 1. -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 7) -',` -deflit(UNROLL_THRESHOLD, 5) -') - - .text - ALIGN(32) -PROLOGUE(mpn_mul_1c) -deflit(`FRAME',0) - movl PARAM_CARRY, %edx - jmp LF(mpn_mul_1,start_nc) -EPILOGUE() - - -PROLOGUE(mpn_mul_1) -deflit(`FRAME',0) - xorl %edx, %edx C initial carry -L(start_nc): - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME', STACK_SPACE) - - movl %edi, SAVE_EDI - movl %ebx, SAVE_EBX - movl %edx, %ebx - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - cmpl $UNROLL_THRESHOLD, %ecx - - movl PARAM_DST, %edi - movl %ebp, SAVE_EBP - jae L(unroll) - - leal (%esi,%ecx,4), %esi - leal (%edi,%ecx,4), %edi - negl %ecx - - movl PARAM_MULTIPLIER, %ebp - -L(simple): - C eax scratch - C ebx carry - C ecx counter (negative) - C edx scratch - C esi src - C edi dst - C ebp multiplier - - movl (%esi,%ecx,4), %eax - - mull %ebp - - addl %ebx, %eax - movl %eax, (%edi,%ecx,4) - movl $0, %ebx - - adcl %edx, %ebx - incl %ecx - jnz L(simple) - - movl %ebx, %eax - movl SAVE_EBX, %ebx - movl SAVE_ESI, %esi - - movl SAVE_EDI, %edi - movl SAVE_EBP, %ebp - addl $STACK_SPACE, %esp - - ret - - -C ----------------------------------------------------------------------------- -C The mov to load the next source limb is done well ahead of the mul, this -C is necessary for full speed. It leads to one limb handled separately -C after the loop. -C -C When unrolling to 32 or more, an offset of +4 is used on the src pointer, -C to avoid having an 0x80 displacement in the code for the last limb in the -C unrolled loop. This is for a fair comparison between 16 and 32 unrolling. - -ifelse(eval(UNROLL_COUNT >= 32),1,` -deflit(SRC_OFFSET,4) -',` -deflit(SRC_OFFSET,) -') - - C this is offset 0x62, so close enough to aligned -L(unroll): - C eax - C ebx initial carry - C ecx size - C edx - C esi src - C edi dst - C ebp -deflit(`FRAME', STACK_SPACE) - - leal -1(%ecx), %edx C one limb handled at end - leal -2(%ecx), %ecx C and ecx is one less than edx - movl %ebp, SAVE_EBP - - negl %edx - shrl $UNROLL_LOG2, %ecx C unrolled loop counter - movl (%esi), %eax C src low limb - - andl $UNROLL_MASK, %edx - movl PARAM_DST, %edi - - movl %edx, %ebp - shll $4, %edx - - C 17 code bytes per limb -ifdef(`PIC',` - call L(add_eip_to_edx) -L(here): -',` - leal L(entry) (%edx,%ebp), %edx -') - negl %ebp - - leal ifelse(UNROLL_BYTES,256,128+) SRC_OFFSET(%esi,%ebp,4), %esi - leal ifelse(UNROLL_BYTES,256,128) (%edi,%ebp,4), %edi - movl PARAM_MULTIPLIER, %ebp - - jmp *%edx - - -ifdef(`PIC',` -L(add_eip_to_edx): - C See README.family about old gas bugs - leal (%edx,%ebp), %edx - addl $L(entry)-L(here), %edx - addl (%esp), %edx - ret -') - - -C ---------------------------------------------------------------------------- - ALIGN(32) -L(top): - C eax next src limb - C ebx carry - C ecx counter - C edx scratch - C esi src+4 - C edi dst - C ebp multiplier - C - C 17 code bytes per limb processed - -L(entry): -forloop(i, 0, UNROLL_COUNT-1, ` - deflit(`disp_dst', eval(i*4 ifelse(UNROLL_BYTES,256,-128))) - deflit(`disp_src', eval(disp_dst + 4-(SRC_OFFSET-0))) - - mull %ebp - - addl %eax, %ebx -Zdisp( movl, disp_src,(%esi), %eax) -Zdisp( movl, %ebx, disp_dst,(%edi)) - - movl $0, %ebx - adcl %edx, %ebx -') - - decl %ecx - - leal UNROLL_BYTES(%esi), %esi - leal UNROLL_BYTES(%edi), %edi - jns L(top) - - -deflit(`disp0', ifelse(UNROLL_BYTES,256,-128)) - - mull %ebp - - addl %eax, %ebx - movl $0, %eax - movl SAVE_ESI, %esi - - movl %ebx, disp0(%edi) - movl SAVE_EBX, %ebx - movl SAVE_EDI, %edi - - adcl %edx, %eax - movl SAVE_EBP, %ebp - addl $STACK_SPACE, %esp - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/k7/mul_basecase.asm b/rts/gmp/mpn/x86/k7/mul_basecase.asm deleted file mode 100644 index c4be62e..0000000 --- a/rts/gmp/mpn/x86/k7/mul_basecase.asm +++ /dev/null @@ -1,593 +0,0 @@ -dnl AMD K7 mpn_mul_basecase -- multiply two mpn numbers. -dnl -dnl K7: approx 4.42 cycles per cross product at around 20x20 limbs (16 -dnl limbs/loop unrolling). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl K7 UNROLL_COUNT cycles/product (at around 20x20) -dnl 8 4.67 -dnl 16 4.59 -dnl 32 4.42 -dnl Maximum possible with the current code is 32. -dnl -dnl At 32 the typical 13-26 limb sizes from the karatsuba code will get -dnl done with a straight run through a block of code, no inner loop. Using -dnl 32 gives 1k of code, but the k7 has a 64k L1 code cache. - -deflit(UNROLL_COUNT, 32) - - -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() startup -C calculations only once. The saving is 15-25% on typical sizes coming from -C the Karatsuba multiply code. - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 5) -',` -deflit(UNROLL_THRESHOLD, 5) -') - -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) - je L(two_by_something) - - - C one limb by one limb - - mull (%edx) - - movl PARAM_WP, %ecx - movl %eax, (%ecx) - movl %edx, 4(%ecx) - ret - - -C ----------------------------------------------------------------------------- -L(two_by_something): -deflit(`FRAME',0) - decl PARAM_YSIZE - pushl %ebx defframe_pushl(`SAVE_EBX') - movl %eax, %ecx C yp low limb - - movl PARAM_WP, %ebx - pushl %esi defframe_pushl(`SAVE_ESI') - movl %edx, %esi C xp - - movl (%edx), %eax C xp low limb - 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) - movl SAVE_ESI, %esi - - adcl $0, %edx - - movl %edx, 8(%ebx) - movl SAVE_EBX, %ebx - addl $FRAME, %esp - - ret - - - -C ----------------------------------------------------------------------------- -C Could load yp earlier into another register. - - 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 - -dnl FRAME carries on from previous - - mull %ecx C xp[0] * yp[0] - - push %edi defframe_pushl(`SAVE_EDI') - movl %edx, %edi C carry, for wp[1] - - movl %eax, (%ebx) - movl 4(%esi), %eax - - mull %ecx C xp[1] * yp[0] - - addl %eax, %edi - movl PARAM_YP, %ecx - - adcl $0, %edx - movl 4(%ecx), %ecx C yp[1] - movl %edi, 4(%ebx) - - 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 - movl %edi, 8(%ebx) - - adcl $0, %esi - movl SAVE_EDI, %edi - movl %esi, 12(%ebx) - - movl SAVE_ESI, %esi - movl SAVE_EBX, %ebx - addl $FRAME, %esp - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(xsize_more_than_two): - -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 13-26 -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 - -dnl FRAME doesn't carry on from previous, no pushes yet here -defframe(`SAVE_EBX',-4) -defframe(`SAVE_ESI',-8) -defframe(`SAVE_EDI',-12) -defframe(`SAVE_EBP',-16) -deflit(`FRAME',0) - - subl $16, %esp -deflit(`FRAME',16) - - movl %edi, SAVE_EDI - movl PARAM_WP, %edi - - movl %ebx, SAVE_EBX - movl %ebp, SAVE_EBP - movl %eax, %ebp - - movl %esi, SAVE_ESI - xorl %ebx, %ebx - leal (%edx,%ecx,4), %esi C xp end - - leal (%edi,%ecx,4), %edi C wp end of mul1 - negl %ecx - - -L(mul1): - C eax scratch - C ebx carry - C ecx counter, negative - C edx scratch - C esi xp end - C edi wp end of mul1 - C ebp multiplier - - movl (%esi,%ecx,4), %eax - - mull %ebp - - addl %ebx, %eax - movl %eax, (%edi,%ecx,4) - movl $0, %ebx - - adcl %edx, %ebx - incl %ecx - jnz L(mul1) - - - movl PARAM_YSIZE, %edx - movl PARAM_XSIZE, %ecx - - movl %ebx, (%edi) C final carry - decl %edx - - jnz L(ysize_more_than_one) - - - movl SAVE_EDI, %edi - movl SAVE_EBX, %ebx - - movl SAVE_EBP, %ebp - movl SAVE_ESI, %esi - addl $FRAME, %esp - - ret - - -L(ysize_more_than_one): - cmpl $UNROLL_THRESHOLD, %ecx - movl PARAM_YP, %eax - - jae L(unroll) - - -C ----------------------------------------------------------------------------- - C simple addmul looping - C - C eax yp - C ebx - C ecx xsize - C edx ysize-1 - C esi xp end - C edi wp end of mul1 - C ebp - - leal 4(%eax,%edx,4), %ebp C yp end - negl %ecx - negl %edx - - movl (%esi,%ecx,4), %eax C xp low limb - movl %edx, PARAM_YSIZE C -(ysize-1) - incl %ecx - - xorl %ebx, %ebx C initial carry - movl %ecx, PARAM_XSIZE C -(xsize-1) - movl %ebp, PARAM_YP - - movl (%ebp,%edx,4), %ebp C yp second lowest limb - multiplier - jmp L(simple_outer_entry) - - - C this is offset 0x121 so close enough to aligned -L(simple_outer_top): - C ebp ysize counter, negative - - movl PARAM_YP, %edx - movl PARAM_XSIZE, %ecx C -(xsize-1) - xorl %ebx, %ebx C carry - - movl %ebp, PARAM_YSIZE - addl $4, %edi C next position in wp - - movl (%edx,%ebp,4), %ebp C yp limb - multiplier - movl -4(%esi,%ecx,4), %eax C xp low limb - - -L(simple_outer_entry): - -L(simple_inner): - C eax xp limb - C ebx carry limb - C ecx loop counter (negative) - C edx scratch - C esi xp end - C edi wp end - C ebp multiplier - - mull %ebp - - addl %eax, %ebx - adcl $0, %edx - - addl %ebx, (%edi,%ecx,4) - movl (%esi,%ecx,4), %eax - adcl $0, %edx - - incl %ecx - movl %edx, %ebx - jnz L(simple_inner) - - - mull %ebp - - movl PARAM_YSIZE, %ebp - addl %eax, %ebx - - adcl $0, %edx - addl %ebx, (%edi) - - adcl $0, %edx - incl %ebp - - movl %edx, 4(%edi) - jnz L(simple_outer_top) - - - movl SAVE_EBX, %ebx - movl SAVE_ESI, %esi - - movl SAVE_EDI, %edi - movl SAVE_EBP, %ebp - addl $FRAME, %esp - - ret - - - -C ----------------------------------------------------------------------------- -C -C The unrolled loop is the same as in mpn_addmul_1(), see that code for some -C comments. -C -C VAR_ADJUST is the negative of how many limbs the leals in the inner loop -C increment xp and wp. This is used to adjust back xp and wp, and rshifted -C to given an initial VAR_COUNTER at the top of the outer loop. -C -C VAR_COUNTER is for the unrolled loop, running from VAR_ADJUST/UNROLL_COUNT -C up to -1, inclusive. -C -C VAR_JMP is the computed jump into the unrolled loop. -C -C VAR_XP_LOW is the least significant limb of xp, which is needed at the -C start of the unrolled loop. -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 The trick with VAR_ADJUST means it's only necessary to do one fetch in the -C outer loop to take care of xp, wp and the inner loop counter. - -defframe(VAR_COUNTER, -20) -defframe(VAR_ADJUST, -24) -defframe(VAR_JMP, -28) -defframe(VAR_XP_LOW, -32) -deflit(VAR_EXTRA_SPACE, 16) - - -L(unroll): - C eax yp - C ebx - C ecx xsize - C edx ysize-1 - C esi xp end - C edi wp end of mul1 - C ebp - - movl PARAM_XP, %esi - movl 4(%eax), %ebp C multiplier (yp second limb) - leal 4(%eax,%edx,4), %eax C yp adjust for ysize indexing - - movl PARAM_WP, %edi - movl %eax, PARAM_YP - negl %edx - - movl %edx, PARAM_YSIZE - leal UNROLL_COUNT-2(%ecx), %ebx C (xsize-1)+UNROLL_COUNT-1 - decl %ecx C xsize-1 - - movl (%esi), %eax C xp low limb - andl $-UNROLL_MASK-1, %ebx - negl %ecx - - subl $VAR_EXTRA_SPACE, %esp -deflit(`FRAME',16+VAR_EXTRA_SPACE) - negl %ebx - andl $UNROLL_MASK, %ecx - - movl %ebx, VAR_ADJUST - movl %ecx, %edx - shll $4, %ecx - - sarl $UNROLL_LOG2, %ebx - - C 17 code bytes per limb -ifdef(`PIC',` - call L(pic_calc) -L(unroll_here): -',` - leal L(unroll_entry) (%ecx,%edx,1), %ecx -') - negl %edx - - movl %eax, VAR_XP_LOW - movl %ecx, VAR_JMP - leal 4(%edi,%edx,4), %edi C wp and xp, adjust for unrolling, - leal 4(%esi,%edx,4), %esi C and start at second limb - jmp L(unroll_outer_entry) - - -ifdef(`PIC',` -L(pic_calc): - C See README.family about old gas bugs - leal (%ecx,%edx,1), %ecx - addl $L(unroll_entry)-L(unroll_here), %ecx - addl (%esp), %ecx - ret -') - - -C -------------------------------------------------------------------------- - ALIGN(32) -L(unroll_outer_top): - C ebp ysize counter, negative - - movl VAR_ADJUST, %ebx - movl PARAM_YP, %edx - - movl VAR_XP_LOW, %eax - movl %ebp, PARAM_YSIZE C store incremented ysize counter - - leal 4(%edi,%ebx,4), %edi - leal (%esi,%ebx,4), %esi - sarl $UNROLL_LOG2, %ebx - - movl (%edx,%ebp,4), %ebp C yp next multiplier - movl VAR_JMP, %ecx - -L(unroll_outer_entry): - mull %ebp - - testb $1, %cl C and clear carry bit - movl %ebx, VAR_COUNTER - movl $0, %ebx - - movl $0, %ecx - cmovz( %eax, %ecx) C eax into low carry, zero into high carry limb - cmovnz( %eax, %ebx) - - C Extra fetch of VAR_JMP is bad, but registers are tight - jmp *VAR_JMP - - -C ----------------------------------------------------------------------------- - ALIGN(32) -L(unroll_top): - C eax xp limb - C ebx carry high - C ecx carry low - C edx scratch - C esi xp+8 - C edi wp - C ebp yp multiplier limb - C - C VAR_COUNTER loop counter, negative - C - C 17 bytes each limb - -L(unroll_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,(%esi), %eax) - adcl %edx, %ebx - - mull %ebp - -Zdisp( addl, %ecx, disp0,(%edi)) - movl $0, %ecx - - adcl %eax, %ebx - - - movl disp1(%esi), %eax - adcl %edx, %ecx - - mull %ebp - - addl %ebx, disp1(%edi) - movl $0, %ebx - - adcl %eax, %ecx -') - - - incl VAR_COUNTER - leal UNROLL_BYTES(%esi), %esi - leal UNROLL_BYTES(%edi), %edi - - jnz L(unroll_top) - - - C eax - C ebx zero - C ecx low - C edx high - C esi - C edi wp, pointing at second last limb) - C ebp - C - C carry flag to be added to high - -deflit(`disp0', ifelse(UNROLL_BYTES,256,-128)) -deflit(`disp1', eval(disp0-0 + 4)) - - movl PARAM_YSIZE, %ebp - adcl $0, %edx - addl %ecx, disp0(%edi) - - adcl $0, %edx - incl %ebp - - movl %edx, disp1(%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/rts/gmp/mpn/x86/k7/sqr_basecase.asm b/rts/gmp/mpn/x86/k7/sqr_basecase.asm deleted file mode 100644 index 84861ea..0000000 --- a/rts/gmp/mpn/x86/k7/sqr_basecase.asm +++ /dev/null @@ -1,627 +0,0 @@ -dnl AMD K7 mpn_sqr_basecase -- square an mpn number. -dnl -dnl K7: approx 2.3 cycles/crossproduct, or 4.55 cycles/triangular product -dnl (measured on the speed difference between 25 and 50 limbs, which is -dnl roughly the Karatsuba recursing range). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl These are the same as mpn/x86/k6/sqr_basecase.asm, see that code for -dnl some comments. - -deflit(KARATSUBA_SQR_THRESHOLD_MAX, 66) - -ifdef(`KARATSUBA_SQR_THRESHOLD_OVERRIDE', -`define(`KARATSUBA_SQR_THRESHOLD',KARATSUBA_SQR_THRESHOLD_OVERRIDE)') - -m4_config_gmp_mparam(`KARATSUBA_SQR_THRESHOLD') -deflit(UNROLL_COUNT, eval(KARATSUBA_SQR_THRESHOLD-3)) - - -C void mpn_sqr_basecase (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C With a KARATSUBA_SQR_THRESHOLD around 50 this code is about 1500 bytes, -C which is quite a bit, but is considered good value since squares big -C enough to use most of the code will be spending quite a few cycles in it. - - -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 - - movl PARAM_DST, %edx - je L(two_limbs) - ja L(three_or_more) - - -C------------------------------------------------------------------------------ -C one limb only - C eax src - C ecx size - C edx dst - - movl (%eax), %eax - movl %edx, %ecx - - mull %eax - - movl %edx, 4(%ecx) - movl %eax, (%ecx) - ret - - -C------------------------------------------------------------------------------ -C -C Using the read/modify/write "add"s seems to be faster than saving and -C restoring registers. Perhaps the loads for the first set hide under the -C mul latency and the second gets store to load forwarding. - - ALIGN(16) -L(two_limbs): - C eax src - C ebx - C ecx size - C edx dst -deflit(`FRAME',0) - - pushl %ebx FRAME_pushl() - movl %eax, %ebx C src - movl (%eax), %eax - - movl %edx, %ecx C dst - - mull %eax C src[0]^2 - - movl %eax, (%ecx) C dst[0] - movl 4(%ebx), %eax - - movl %edx, 4(%ecx) C dst[1] - - mull %eax C src[1]^2 - - movl %eax, 8(%ecx) C dst[2] - movl (%ebx), %eax - - movl %edx, 12(%ecx) C dst[3] - - mull 4(%ebx) C src[0]*src[1] - - popl %ebx - - addl %eax, 4(%ecx) - adcl %edx, 8(%ecx) - adcl $0, 12(%ecx) - ASSERT(nc) - - addl %eax, 4(%ecx) - adcl %edx, 8(%ecx) - adcl $0, 12(%ecx) - ASSERT(nc) - - ret - - -C------------------------------------------------------------------------------ -defframe(SAVE_EBX, -4) -defframe(SAVE_ESI, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -deflit(STACK_SPACE, 16) - -L(three_or_more): - subl $STACK_SPACE, %esp - cmpl $4, %ecx - jae L(four_or_more) -deflit(`FRAME',STACK_SPACE) - - -C------------------------------------------------------------------------------ -C Three limbs -C -C Writing out the loads and stores separately at the end of this code comes -C out about 10 cycles faster than using adcls to memory. - - C eax src - C ecx size - C edx dst - - movl %ebx, SAVE_EBX - movl %eax, %ebx C src - movl (%eax), %eax - - movl %edx, %ecx C dst - movl %esi, SAVE_ESI - movl %edi, SAVE_EDI - - 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 8(%ebx), %eax - movl %edx, 12(%ecx) - - mull %eax C src[2] ^ 2 - - movl %eax, 16(%ecx) - movl (%ebx), %eax - movl %edx, 20(%ecx) - - mull 4(%ebx) C src[0] * src[1] - - movl %eax, %esi - movl (%ebx), %eax - movl %edx, %edi - - mull 8(%ebx) C src[0] * src[2] - - addl %eax, %edi - movl %ebp, SAVE_EBP - movl $0, %ebp - - movl 4(%ebx), %eax - adcl %edx, %ebp - - mull 8(%ebx) C src[1] * src[2] - - xorl %ebx, %ebx - addl %eax, %ebp - - adcl $0, %edx - - C eax - C ebx zero, will be dst[5] - C ecx dst - C edx dst[4] - C esi dst[1] - C edi dst[2] - C ebp dst[3] - - adcl $0, %edx - addl %esi, %esi - - adcl %edi, %edi - movl 4(%ecx), %eax - - adcl %ebp, %ebp - - adcl %edx, %edx - - adcl $0, %ebx - addl %eax, %esi - movl 8(%ecx), %eax - - adcl %eax, %edi - movl 12(%ecx), %eax - movl %esi, 4(%ecx) - - adcl %eax, %ebp - movl 16(%ecx), %eax - movl %edi, 8(%ecx) - - movl SAVE_ESI, %esi - movl SAVE_EDI, %edi - - adcl %eax, %edx - movl 20(%ecx), %eax - movl %ebp, 12(%ecx) - - adcl %ebx, %eax - ASSERT(nc) - movl SAVE_EBX, %ebx - movl SAVE_EBP, %ebp - - movl %edx, 16(%ecx) - movl %eax, 20(%ecx) - addl $FRAME, %esp - - ret - - -C------------------------------------------------------------------------------ -L(four_or_more): - -C First multiply src[0]*src[1..size-1] and store at dst[1..size]. -C Further products are added in rather than stored. - - C eax src - C ebx - C ecx size - C edx dst - C esi - C edi - C ebp - -defframe(`VAR_COUNTER',-20) -defframe(`VAR_JMP', -24) -deflit(EXTRA_STACK_SPACE, 8) - - movl %ebx, SAVE_EBX - movl %edi, SAVE_EDI - leal (%edx,%ecx,4), %edi C &dst[size] - - movl %esi, SAVE_ESI - movl %ebp, SAVE_EBP - leal (%eax,%ecx,4), %esi C &src[size] - - movl (%eax), %ebp C multiplier - movl $0, %ebx - decl %ecx - - negl %ecx - subl $EXTRA_STACK_SPACE, %esp -FRAME_subl_esp(EXTRA_STACK_SPACE) - -L(mul_1): - C eax scratch - C ebx carry - C ecx counter - C edx scratch - C esi &src[size] - C edi &dst[size] - C ebp multiplier - - movl (%esi,%ecx,4), %eax - - mull %ebp - - addl %ebx, %eax - movl %eax, (%edi,%ecx,4) - movl $0, %ebx - - adcl %edx, %ebx - incl %ecx - jnz L(mul_1) - - -C Add products src[n]*src[n+1..size-1] at dst[2*n-1...], for each n=1..size-2. -C -C The last two products, 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 in mpn_addmul_1, see that routine for -C some 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 K7 does branch prediction on indirect jumps, which is bad since it's a -C different target each time. There seems no way to avoid this. - -dnl This value also hard coded in some shifts and adds -deflit(CODE_BYTES_PER_LIMB, 17) - -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, but above that an offset must be added to them. - -deflit(OFFSET, -ifelse(eval(UNROLL_COUNT>31),1, -eval((UNROLL_COUNT-31)*4), -0)) - -dnl Because the last chunk of code is generated differently, a label placed -dnl at the end doesn't work. Instead calculate the implied end using the -dnl start and how many chunks of code there are. - -deflit(UNROLL_INNER_END, -`L(unroll_inner_start)+eval(UNROLL_COUNT*CODE_BYTES_PER_LIMB)') - - C eax - C ebx carry - C ecx - C edx - C esi &src[size] - C edi &dst[size] - C ebp - - movl PARAM_SIZE, %ecx - movl %ebx, (%edi) - - subl $4, %ecx - jz L(corner) - - negl %ecx -ifelse(OFFSET,0,,`subl $OFFSET, %edi') -ifelse(OFFSET,0,,`subl $OFFSET, %esi') - - movl %ecx, %edx - shll $4, %ecx - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal UNROLL_INNER_END-eval(2*CODE_BYTES_PER_LIMB)(%ecx,%edx), %ecx -') - - - C The calculated jump mustn't come out to before the start of the - C code available. This is the limit UNROLL_COUNT puts on the src - C operand size, but checked here directly using the jump address. - ASSERT(ae, - `movl_text_address(L(unroll_inner_start), %eax) - cmpl %eax, %ecx') - - -C------------------------------------------------------------------------------ - ALIGN(16) -L(unroll_outer_top): - C eax - C ebx high limb to store - C ecx VAR_JMP - C edx VAR_COUNTER, limbs, negative - C esi &src[size], constant - C edi dst ptr, high of last addmul - C ebp - - movl -12+OFFSET(%esi,%edx,4), %ebp C next multiplier - movl -8+OFFSET(%esi,%edx,4), %eax C first of multiplicand - - movl %edx, VAR_COUNTER - - mull %ebp - -define(cmovX,`ifelse(eval(UNROLL_COUNT%2),0,`cmovz($@)',`cmovnz($@)')') - - testb $1, %cl - movl %edx, %ebx C high carry - movl %ecx, %edx C jump - - movl %eax, %ecx C low carry - cmovX( %ebx, %ecx) C high carry reverse - cmovX( %eax, %ebx) C low carry reverse - - leal CODE_BYTES_PER_LIMB(%edx), %eax - xorl %edx, %edx - leal 4(%edi), %edi - - movl %eax, VAR_JMP - - jmp *%eax - - -ifdef(`PIC',` -L(pic_calc): - addl (%esp), %ecx - addl $UNROLL_INNER_END-eval(2*CODE_BYTES_PER_LIMB)-L(here), %ecx - addl %edx, %ecx - ret -') - - - C Must be an even address to preserve the significance of the low - C bit of the jump address indicating which way around ecx/ebx should - C start. - ALIGN(2) - -L(unroll_inner_start): - C eax next limb - C ebx carry high - C ecx carry low - C edx scratch - C esi src - C edi dst - C ebp multiplier - -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,(%esi), %eax) - adcl %edx, %ebx - - mull %ebp - -Zdisp( addl, %ecx, disp_dst,(%edi)) - movl $0, %ecx - - adcl %eax, %ebx - -',` - dnl this bit comes out last -Zdisp( movl, disp_src,(%esi), %eax) - adcl %edx, %ecx - - mull %ebp - -dnl Zdisp( addl %ebx, disp_src,(%edi)) - addl %ebx, disp_dst(%edi) -ifelse(forloop_last,0, -` movl $0, %ebx') - - adcl %eax, %ecx -') -') - - C eax next limb - C ebx carry high - C ecx carry low - C edx scratch - C esi src - C edi dst - C ebp multiplier - - adcl $0, %edx - addl %ecx, -4+OFFSET(%edi) - movl VAR_JMP, %ecx - - adcl $0, %edx - - movl %edx, m4_empty_if_zero(OFFSET) (%edi) - movl VAR_COUNTER, %edx - - incl %edx - jnz L(unroll_outer_top) - - -ifelse(OFFSET,0,,` - addl $OFFSET, %esi - addl $OFFSET, %edi -') - - -C------------------------------------------------------------------------------ -L(corner): - C esi &src[size] - C edi &dst[2*size-5] - - movl -12(%esi), %ebp - movl -8(%esi), %eax - movl %eax, %ecx - - mull %ebp - - addl %eax, -4(%edi) - movl -4(%esi), %eax - - adcl $0, %edx - movl %edx, %ebx - movl %eax, %esi - - mull %ebp - - addl %ebx, %eax - - adcl $0, %edx - addl %eax, (%edi) - movl %esi, %eax - - adcl $0, %edx - movl %edx, %ebx - - mull %ecx - - addl %ebx, %eax - movl %eax, 4(%edi) - - adcl $0, %edx - movl %edx, 8(%edi) - - - -C Left shift of dst[1..2*size-2], high bit shifted out becomes dst[2*size-1]. - -L(lshift_start): - movl PARAM_SIZE, %eax - movl PARAM_DST, %edi - xorl %ecx, %ecx C clear carry - - leal (%edi,%eax,8), %edi - notl %eax C -size-1, preserve carry - - leal 2(%eax), %eax C -(size-1) - -L(lshift): - C eax counter, negative - C ebx - C ecx - C edx - C esi - C edi dst, pointing just after last limb - C ebp - - rcll -4(%edi,%eax,8) - rcll (%edi,%eax,8) - incl %eax - jnz L(lshift) - - setc %al - - movl PARAM_SRC, %esi - movl %eax, -4(%edi) C dst most significant limb - - movl PARAM_SIZE, %ecx - - -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. - - movl (%esi), %eax C src[0] - - mull %eax - - leal (%esi,%ecx,4), %esi C src point just after last limb - negl %ecx - - movl %eax, (%edi,%ecx,8) C dst[0] - incl %ecx - -L(diag): - C eax scratch - C ebx scratch - C ecx counter, negative - C edx carry - C esi src just after last limb - C edi dst just after last limb - C ebp - - movl (%esi,%ecx,4), %eax - movl %edx, %ebx - - mull %eax - - addl %ebx, -4(%edi,%ecx,8) - adcl %eax, (%edi,%ecx,8) - adcl $0, %edx - - incl %ecx - jnz L(diag) - - - movl SAVE_ESI, %esi - movl SAVE_EBX, %ebx - - addl %edx, -4(%edi) C dst most significant limb - movl SAVE_EDI, %edi - - movl SAVE_EBP, %ebp - addl $FRAME, %esp - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/lshift.asm b/rts/gmp/mpn/x86/lshift.asm deleted file mode 100644 index 4735335..0000000 --- a/rts/gmp/mpn/x86/lshift.asm +++ /dev/null @@ -1,90 +0,0 @@ -dnl x86 mpn_lshift -- mpn left shift. - -dnl Copyright (C) 1992, 1994, 1996, 1999, 2000 Free Software Foundation, -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_lshift) - - pushl %edi - pushl %esi - pushl %ebx -deflit(`FRAME',12) - - movl PARAM_DST,%edi - movl PARAM_SRC,%esi - movl PARAM_SIZE,%edx - movl PARAM_SHIFT,%ecx - - subl $4,%esi C adjust src - - movl (%esi,%edx,4),%ebx C read most significant limb - xorl %eax,%eax - shldl( %cl, %ebx, %eax) C compute carry limb - decl %edx - jz L(end) - pushl %eax C push carry limb onto stack - testb $1,%dl - jnz L(1) C enter loop in the middle - movl %ebx,%eax - - ALIGN(8) -L(oop): movl (%esi,%edx,4),%ebx C load next lower limb - shldl( %cl, %ebx, %eax) C compute result limb - movl %eax,(%edi,%edx,4) C store it - decl %edx -L(1): movl (%esi,%edx,4),%eax - shldl( %cl, %eax, %ebx) - movl %ebx,(%edi,%edx,4) - decl %edx - jnz L(oop) - - shll %cl,%eax C compute least significant limb - movl %eax,(%edi) C store it - - popl %eax C pop carry limb - - popl %ebx - popl %esi - popl %edi - ret - -L(end): shll %cl,%ebx C compute least significant limb - movl %ebx,(%edi) C store it - - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/mod_1.asm b/rts/gmp/mpn/x86/mod_1.asm deleted file mode 100644 index 3908161..0000000 --- a/rts/gmp/mpn/x86/mod_1.asm +++ /dev/null @@ -1,141 +0,0 @@ -dnl x86 mpn_mod_1 -- mpn by limb remainder. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl cycles/limb -dnl K6 20 -dnl P5 44 -dnl P6 39 -dnl 486 approx 42 maybe -dnl -dnl The following have their own optimized mod_1 implementations, but for -dnl reference the code here runs as follows. -dnl -dnl P6MMX 39 -dnl K7 41 - - -include(`../config.m4') - - -C mp_limb_t mpn_mod_1 (mp_srcptr src, mp_size_t size, mp_limb_t divisor); -C mp_limb_t mpn_mod_1c (mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t carry); -C -C Divide src,size by divisor and return the remainder. The quotient is -C discarded. -C -C See mpn/x86/divrem_1.asm for some comments. - -defframe(PARAM_CARRY, 16) -defframe(PARAM_DIVISOR,12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 4) - - .text - ALIGN(16) - -PROLOGUE(mpn_mod_1c) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - pushl %esi FRAME_pushl() - - movl PARAM_DIVISOR, %esi - orl %ecx, %ecx - - movl PARAM_CARRY, %edx - jnz LF(mpn_mod_1,top) - - popl %esi - movl %edx, %eax - - popl %ebx - - ret - -EPILOGUE() - - -PROLOGUE(mpn_mod_1) -deflit(`FRAME',0) - - movl PARAM_SIZE, %ecx - pushl %ebx FRAME_pushl() - - movl PARAM_SRC, %ebx - pushl %esi FRAME_pushl() - - orl %ecx, %ecx - jz L(done_zero) - - movl PARAM_DIVISOR, %esi - movl -4(%ebx,%ecx,4), %eax C src high limb - - cmpl %esi, %eax - - sbbl %edx, %edx C -1 if high 4-fold for that -C part of the function, but since it is not very large, that would be -C acceptable. -C -C The mul loop (at L(oopM)) might need some tweaking. It's current speed is -C unknown. - -defframe(PARAM_YSIZE,20) -defframe(PARAM_YP, 16) -defframe(PARAM_XSIZE,12) -defframe(PARAM_XP, 8) -defframe(PARAM_WP, 4) - -defframe(VAR_MULTIPLIER, -4) -defframe(VAR_COUNTER, -8) -deflit(VAR_STACK_SPACE, 8) - - .text - ALIGN(8) - -PROLOGUE(mpn_mul_basecase) -deflit(`FRAME',0) - - subl $VAR_STACK_SPACE,%esp - pushl %esi - pushl %ebp - pushl %edi -deflit(`FRAME',eval(VAR_STACK_SPACE+12)) - - movl PARAM_XP,%esi - movl PARAM_WP,%edi - movl PARAM_YP,%ebp - - movl (%esi),%eax C load xp[0] - mull (%ebp) C multiply by yp[0] - movl %eax,(%edi) C store to wp[0] - movl PARAM_XSIZE,%ecx C xsize - decl %ecx C If xsize = 1, ysize = 1 too - jz L(done) - - pushl %ebx -FRAME_pushl() - movl %edx,%ebx - - leal 4(%esi),%esi - leal 4(%edi),%edi - -L(oopM): - movl (%esi),%eax C load next limb at xp[j] - leal 4(%esi),%esi - mull (%ebp) - addl %ebx,%eax - movl %edx,%ebx - adcl $0,%ebx - movl %eax,(%edi) - leal 4(%edi),%edi - decl %ecx - jnz L(oopM) - - movl %ebx,(%edi) C most significant limb of product - addl $4,%edi C increment wp - movl PARAM_XSIZE,%eax - shll $2,%eax - subl %eax,%edi - subl %eax,%esi - - movl PARAM_YSIZE,%eax C ysize - decl %eax - jz L(skip) - movl %eax,VAR_COUNTER C set index i to ysize - -L(outer): - movl PARAM_YP,%ebp C yp - addl $4,%ebp C make ebp point to next v limb - movl %ebp,PARAM_YP - movl (%ebp),%eax C copy y limb ... - movl %eax,VAR_MULTIPLIER C ... to stack slot - movl PARAM_XSIZE,%ecx - - xorl %ebx,%ebx - andl $3,%ecx - jz L(end0) - -L(oop0): - movl (%esi),%eax - mull VAR_MULTIPLIER - leal 4(%esi),%esi - addl %ebx,%eax - movl $0,%ebx - adcl %ebx,%edx - addl %eax,(%edi) - adcl %edx,%ebx C propagate carry into cylimb - - leal 4(%edi),%edi - decl %ecx - jnz L(oop0) - -L(end0): - movl PARAM_XSIZE,%ecx - shrl $2,%ecx - jz L(endX) - - ALIGN(8) -L(oopX): - movl (%esi),%eax - mull VAR_MULTIPLIER - addl %eax,%ebx - movl $0,%ebp - adcl %edx,%ebp - - movl 4(%esi),%eax - mull VAR_MULTIPLIER - addl %ebx,(%edi) - adcl %eax,%ebp C new lo + cylimb - movl $0,%ebx - adcl %edx,%ebx - - movl 8(%esi),%eax - mull VAR_MULTIPLIER - addl %ebp,4(%edi) - adcl %eax,%ebx C new lo + cylimb - movl $0,%ebp - adcl %edx,%ebp - - movl 12(%esi),%eax - mull VAR_MULTIPLIER - addl %ebx,8(%edi) - adcl %eax,%ebp C new lo + cylimb - movl $0,%ebx - adcl %edx,%ebx - - addl %ebp,12(%edi) - adcl $0,%ebx C propagate carry into cylimb - - leal 16(%esi),%esi - leal 16(%edi),%edi - decl %ecx - jnz L(oopX) - -L(endX): - movl %ebx,(%edi) - addl $4,%edi - - C we incremented wp and xp in the loop above; compensate - movl PARAM_XSIZE,%eax - shll $2,%eax - subl %eax,%edi - subl %eax,%esi - - movl VAR_COUNTER,%eax - decl %eax - movl %eax,VAR_COUNTER - jnz L(outer) - -L(skip): - popl %ebx - popl %edi - popl %ebp - popl %esi - addl $8,%esp - ret - -L(done): - movl %edx,4(%edi) C store to wp[1] - popl %edi - popl %ebp - popl %esi - addl $8,%esp - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/p6/README b/rts/gmp/mpn/x86/p6/README deleted file mode 100644 index 7dbc905..0000000 --- a/rts/gmp/mpn/x86/p6/README +++ /dev/null @@ -1,95 +0,0 @@ - - INTEL P6 MPN SUBROUTINES - - - -This directory contains code optimized for Intel P6 class CPUs, meaning -PentiumPro, Pentium II and Pentium III. The mmx and p3mmx subdirectories -have routines using MMX instructions. - - - -STATUS - -Times for the loops, with all code and data in L1 cache, are as follows. -Some of these might be able to be improved. - - cycles/limb - - mpn_add_n/sub_n 3.7 - - mpn_copyi 0.75 - mpn_copyd 2.4 - - mpn_divrem_1 39.0 - mpn_mod_1 39.0 - mpn_divexact_by3 8.5 - - mpn_mul_1 5.5 - mpn_addmul/submul_1 6.35 - - mpn_l/rshift 2.5 - - mpn_mul_basecase 8.2 cycles/crossproduct (approx) - mpn_sqr_basecase 4.0 cycles/crossproduct (approx) - or 7.75 cycles/triangleproduct (approx) - -Pentium II and III have MMX and get the following improvements. - - mpn_divrem_1 25.0 integer part, 17.5 fractional part - mpn_mod_1 24.0 - - mpn_l/rshift 1.75 - - - - -NOTES - -Write-allocate L1 data cache means prefetching of destinations is unnecessary. - -Mispredicted branches have a penalty of between 9 and 15 cycles, and even up -to 26 cycles depending how far speculative execution has gone. The 9 cycle -minimum penalty comes from the issue pipeline being 9 stages. - -A copy with rep movs seems to copy 16 bytes at a time, since speeds for 4, -5, 6 or 7 limb operations are all the same. The 0.75 cycles/limb would be 3 -cycles per 16 byte block. - - - - -CODING - -Instructions in general code have been shown grouped if they can execute -together, which means up to three instructions with no successive -dependencies, and with only the first being a multiple micro-op. - -P6 has out-of-order execution, so the groupings are really only showing -dependent paths where some shuffling might allow some latencies to be -hidden. - - - - -REFERENCES - -"Intel Architecture Optimization Reference Manual", 1999, revision 001 dated -02/99, order number 245127 (order number 730795-001 is in the document too). -Available on-line: - - http://download.intel.com/design/PentiumII/manuals/245127.htm - -"Intel Architecture Optimization Manual", 1997, order number 242816. This -is an older document mostly about P5 and not as good as the above. -Available on-line: - - http://download.intel.com/design/PentiumII/manuals/242816.htm - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/rts/gmp/mpn/x86/p6/aorsmul_1.asm b/rts/gmp/mpn/x86/p6/aorsmul_1.asm deleted file mode 100644 index feb364e..0000000 --- a/rts/gmp/mpn/x86/p6/aorsmul_1.asm +++ /dev/null @@ -1,300 +0,0 @@ -dnl Intel P6 mpn_addmul_1/mpn_submul_1 -- add or subtract mpn multiple. -dnl -dnl P6: 6.35 cycles/limb (at 16 limbs/loop). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl P6 UNROLL_COUNT cycles/limb -dnl 8 6.7 -dnl 16 6.35 -dnl 32 6.3 -dnl 64 6.3 -dnl Maximum possible with the current code is 64. - -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) - define(M4_description, add it to) - define(M4_desc_retval, carry) -',`ifdef(`OPERATION_submul_1', ` - define(M4_inst, subl) - define(M4_function_1, mpn_submul_1) - define(M4_function_1c, mpn_submul_1c) - define(M4_description, subtract it from) - define(M4_desc_retval, borrow) -',`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 M4_function_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult); -C mp_limb_t M4_function_1c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t mult, mp_limb_t carry); -C -C Calculate src,size multiplied by mult and M4_description dst,size. -C Return the M4_desc_retval limb from the top of the result. -C -C This code is pretty much the same as the K6 code. The unrolled loop is -C the same, but there's just a few scheduling tweaks in the setups and the -C simple loop. -C -C A number of variations have been tried for the unrolled loop, with one or -C two carries, and with loads scheduled earlier, but nothing faster than 6 -C cycles/limb has been found. - -ifdef(`PIC',` -deflit(UNROLL_THRESHOLD, 5) -',` -deflit(UNROLL_THRESHOLD, 5) -') - -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 %ebx -deflit(`FRAME',4) - movl PARAM_CARRY, %ebx - jmp LF(M4_function_1,start_nc) -EPILOGUE() - -PROLOGUE(M4_function_1) - push %ebx -deflit(`FRAME',4) - xorl %ebx, %ebx C initial carry - -L(start_nc): - movl PARAM_SIZE, %ecx - pushl %esi -deflit(`FRAME',8) - - movl PARAM_SRC, %esi - pushl %edi -deflit(`FRAME',12) - - movl PARAM_DST, %edi - pushl %ebp -deflit(`FRAME',16) - cmpl $UNROLL_THRESHOLD, %ecx - - movl PARAM_MULTIPLIER, %ebp - jae L(unroll) - - - C simple loop - C this is offset 0x22, so close enough to aligned -L(simple): - C eax scratch - C ebx carry - C ecx counter - C edx scratch - C esi src - C edi dst - C ebp multiplier - - movl (%esi), %eax - addl $4, %edi - - mull %ebp - - addl %ebx, %eax - adcl $0, %edx - - M4_inst %eax, -4(%edi) - movl %edx, %ebx - - adcl $0, %ebx - decl %ecx - - leal 4(%esi), %esi - jnz L(simple) - - - popl %ebp - popl %edi - - popl %esi - movl %ebx, %eax - - popl %ebx - ret - - - -C------------------------------------------------------------------------------ -C VAR_JUMP holds the computed jump temporarily because there's not enough -C registers when doing the mul for the initial two carry limbs. -C -C The add/adc for the initial carry in %ebx is necessary only for the -C mpn_add/submul_1c entry points. Duplicating the startup code to -C eliminiate 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') - - C this is offset 0x43, so close enough to aligned -L(unroll): - C eax - C ebx initial carry - C ecx size - C edx - C esi src - 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 - - C 15 code bytes per limb -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - shll $4, %edx - negl %ecx - - leal L(entry) (%edx,%ecx,1), %edx -') - movl (%esi), %eax C src low limb - - movl %edx, VAR_JUMP - leal ifelse(UNROLL_BYTES,256,128+) 4(%esi,%ecx,4), %esi - - mull %ebp - - addl %ebx, %eax C initial carry (from _1c) - adcl $0, %edx - - movl %edx, %ebx C high carry - leal ifelse(UNROLL_BYTES,256,128) (%edi,%ecx,4), %edi - - movl VAR_JUMP, %edx - testl $1, %ecx - movl %eax, %ecx C low carry - - cmovnz( %ebx, %ecx) C high,low carry other way around - cmovnz( %eax, %ebx) - - jmp *%edx - - -ifdef(`PIC',` -L(pic_calc): - shll $4, %edx - negl %ecx - - C See README.family about old gas bugs - leal (%edx,%ecx,1), %edx - addl $L(entry)-L(here), %edx - - addl (%esp), %edx - - ret -') - - -C ----------------------------------------------------------- - ALIGN(32) -L(top): -deflit(`FRAME',16) - C eax scratch - C ebx carry hi - C ecx carry lo - C edx scratch - C esi src - C edi dst - C ebp multiplier - C - C VAR_COUNTER loop counter - C - C 15 code bytes per limb - - addl $UNROLL_BYTES, %edi - -L(entry): -deflit(CHUNK_COUNT,2) -forloop(`i', 0, UNROLL_COUNT/CHUNK_COUNT-1, ` - deflit(`disp0', eval(i*4*CHUNK_COUNT ifelse(UNROLL_BYTES,256,-128))) - deflit(`disp1', eval(disp0 + 4)) - -Zdisp( movl, disp0,(%esi), %eax) - mull %ebp -Zdisp( M4_inst,%ecx, disp0,(%edi)) - adcl %eax, %ebx - movl %edx, %ecx - adcl $0, %ecx - - movl disp1(%esi), %eax - mull %ebp - M4_inst %ebx, disp1(%edi) - adcl %eax, %ecx - movl %edx, %ebx - adcl $0, %ebx -') - - decl VAR_COUNTER - leal UNROLL_BYTES(%esi), %esi - - jns L(top) - - -deflit(`disp0', eval(UNROLL_BYTES ifelse(UNROLL_BYTES,256,-128))) - - M4_inst %ecx, disp0(%edi) - movl %ebx, %eax - - popl %ebp - popl %edi - - popl %esi - popl %ebx - adcl $0, %eax - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/p6/diveby3.asm b/rts/gmp/mpn/x86/p6/diveby3.asm deleted file mode 100644 index a77703e..0000000 --- a/rts/gmp/mpn/x86/p6/diveby3.asm +++ /dev/null @@ -1,37 +0,0 @@ -dnl Intel P6 mpn_divexact_by3 -- mpn division by 3, expecting no remainder. -dnl -dnl P6: 8.5 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl The P5 code runs well on P6, in fact better than anything else found so -dnl far. An imul is 4 cycles, meaning the two cmp/sbbl pairs on the -dnl dependent path are taking 4.5 cycles. -dnl -dnl The destination cache line prefetching is unnecessary on P6, but -dnl removing it is a 2 cycle slowdown (approx), so it must be inducing -dnl something good in the out of order execution. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_divexact_by3c) -include_mpn(`x86/pentium/diveby3.asm') diff --git a/rts/gmp/mpn/x86/p6/gmp-mparam.h b/rts/gmp/mpn/x86/p6/gmp-mparam.h deleted file mode 100644 index d7bfb6d..0000000 --- a/rts/gmp/mpn/x86/p6/gmp-mparam.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Intel P6 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -#ifndef UMUL_TIME -#define UMUL_TIME 5 /* cycles */ -#endif -#ifndef UDIV_TIME -#define UDIV_TIME 39 /* cycles */ -#endif - -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 2 /* cycles */ -#endif - - -/* Generated by tuneup.c, 2000-07-06. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 23 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 139 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 52 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 166 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 116 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 66 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 20 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 54 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 592, 1440, 2688, 5632, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 608 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 5888 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 656, 1504, 2944, 6656, 18432, 57344, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 672 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 5888 -#endif diff --git a/rts/gmp/mpn/x86/p6/mmx/divrem_1.asm b/rts/gmp/mpn/x86/p6/mmx/divrem_1.asm deleted file mode 100644 index f1b011b..0000000 --- a/rts/gmp/mpn/x86/p6/mmx/divrem_1.asm +++ /dev/null @@ -1,677 +0,0 @@ -dnl Intel Pentium-II mpn_divrem_1 -- mpn by limb division. -dnl -dnl P6MMX: 25.0 cycles/limb integer part, 17.5 cycles/limb fraction part. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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 -C This code is a lightly reworked version of mpn/x86/k7/mmx/divrem_1.asm, -C see that file for some comments. It's likely what's here can be improved. - - -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 different speeds of the integer and fraction parts means that using -dnl xsize+size isn't quite right. The threshold wants to be a bit higher -dnl for the integer part and a bit lower for the fraction part. (Or what's -dnl really wanted is to speed up the integer part!) -dnl -dnl The threshold is set to make the integer part right. At 4 limbs the -dnl div and mul are about the same there, but on the fractional part the -dnl mul is much faster. - -deflit(MUL_THRESHOLD, 4) - - -defframe(PARAM_CARRY, 24) -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(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 - jmp LF(mpn_divrem_1,start_1c) - -EPILOGUE() - - - C offset 0x31, 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 %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %ebx, SAVE_EBX - movl PARAM_XSIZE, %ebx - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - orl %ecx, %ecx - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - - leal -4(%edi,%ebx,4), %edi C &dst[xsize-1] - jz L(no_skip_div) - - movl -4(%esi,%ecx,4), %eax C src high limb - cmpl %ebp, %eax C one less div if high=MUL_THRESHOLD, so with size==0 then - C must have xsize!=0 - jmp L(fraction_some) - - - -C ----------------------------------------------------------------------------- -C -C This loop runs at about 25 cycles, which is probably sub-optimal, and -C certainly more than the dependent chain would suggest. A better loop, or -C a better rough analysis of what's possible, would be welcomed. -C -C In the current implementation, the following successively dependent -C micro-ops seem to exist. -C -C uops -C n2+n1 1 (addl) -C mul 5 -C q1+1 3 (addl/adcl) -C mul 5 -C sub 3 (subl/sbbl) -C addback 2 (cmov) -C --- -C 19 -C -C Lack of registers hinders explicit scheduling and it might be that the -C normal out of order execution isn't able to hide enough under the mul -C latencies. -C -C Using sarl/negl to pick out n1 for the n2+n1 stage is a touch faster than -C cmov (and takes one uop off the dependent chain). A sarl/andl/addl -C combination was tried for the addback (despite the fact it would lengthen -C the dependent chain) but found to be no faster. - - - 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 d - C - C mm0 scratch (src qword) - C mm7 rshift for normalization - - movl %esi, %eax - movl %ebp, %ebx - - sarl $31, %eax C -n1 - movl VAR_SRC, %ecx - - andl %eax, %ebx C -n1 & d - negl %eax C n1 - - addl %esi, %ebx C nadj = n10 + (-n1 & d), ignoring overflow - addl %edi, %eax C n2+n1 - movq (%ecx), %mm0 C next src limb and the one below it - - mull VAR_INVERSE C m*(n2+n1) - - subl $4, %ecx - - movl %ecx, VAR_SRC - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - movl %ebp, %eax C d - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - jz L(q1_ff) - - mull %ebx C (q1+1)*d - - movl VAR_DST, %ecx - psrlq %mm7, %mm0 - - C - - C - - C - - subl %eax, %esi - movl VAR_DST_STOP, %eax - - 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 - movd %mm0, %esi - - sbbl $0, %ebx C q - subl $4, %ecx - - movl %ebx, (%ecx) - cmpl %eax, %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 2 cycles (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 mm0 src limb, shifted - C mm7 rshift - - - movl %esi, %eax - movl %ebp, %ebx - - sarl $31, %eax C -n1 - movl PARAM_SRC, %ecx - - andl %eax, %ebx C -n1 & d - negl %eax C n1 - - addl %esi, %ebx C nadj = n10 + (-n1 & d), ignoring overflow - addl %edi, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - movd (%ecx), %mm0 C src low limb - - movl VAR_DST_STOP, %ecx - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - 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 - - C - - subl %eax, %esi - - 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 - movd %mm0, %esi - - sbbl $0, %ebx C q - - movl %ebx, -4(%ecx) - - -C ----------------------------------------------------------------------------- -L(integer_one_left): - C eax scratch - C ebx scratch (nadj, q1) - C ecx scratch (dst) - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 src limb, shifted - C mm7 rshift - - - movl %esi, %eax - movl %ebp, %ebx - - sarl $31, %eax C -n1 - movl VAR_DST_STOP, %ecx - - andl %eax, %ebx C -n1 & d - negl %eax C n1 - - addl %esi, %ebx C nadj = n10 + (-n1 & d), ignoring overflow - addl %edi, %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<<32 + m*(n2+n1)) - 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 - - C - - subl %eax, %esi - movl PARAM_XSIZE, %eax - - 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 - - - - orl %eax, %eax C xsize - jnz L(fraction_some) - - movl %edi, %eax -L(fraction_done): - movl VAR_NORM, %ecx - 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 - - movl %ecx, VAR_DST - psrlq %mm7, %mm0 - leal (%ebp,%esi), %edi C n-q*d remainder -> next n2 - - movl $-1, (%ecx) - movd %mm0, %esi C next n10 - - cmpl %ecx, %edx - jne L(integer_top) - - jmp L(integer_loop_done) - - - -C ----------------------------------------------------------------------------- -C -C In the current implementation, the following successively dependent -C micro-ops seem to exist. -C -C uops -C mul 5 -C q1+1 1 (addl) -C mul 5 -C sub 3 (negl/sbbl) -C addback 2 (cmov) -C --- -C 16 -C -C The loop in fact runs at about 17.5 cycles. Using a sarl/andl/addl for -C the addback was found to be a touch slower. - - - 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 - movl %edi, %eax - - subl $8, %ecx - - - ALIGN(16) -L(fraction_top): - C eax n2, then scratch - C ebx scratch (nadj, q1) - C ecx dst, decrementing - C edx scratch - C esi dst stop point - C edi n2 - C ebp divisor - - mull VAR_INVERSE C m*n2 - - movl %ebp, %eax C d - subl $4, %ecx C dst - leal 1(%edi), %ebx - - C - - C - - C - - addl %edx, %ebx C 1 + high(n2<<32 + m*n2) = q1+1 - - mull %ebx C (q1+1)*d - - C - - C - - C - - C - - negl %eax C low of n - (q1+1)*d - - 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 - movl %eax, %edi C remainder->n2 - cmpl %esi, %ecx - - movl %ebx, (%ecx) C previous q - jne L(fraction_top) - - - jmp L(fraction_done) - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/p6/mmx/mod_1.asm b/rts/gmp/mpn/x86/p6/mmx/mod_1.asm deleted file mode 100644 index e7d8d94..0000000 --- a/rts/gmp/mpn/x86/p6/mmx/mod_1.asm +++ /dev/null @@ -1,444 +0,0 @@ -dnl Intel Pentium-II mpn_mod_1 -- mpn by limb remainder. -dnl -dnl P6MMX: 24.0 cycles/limb. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_mod_1 (mp_srcptr src, mp_size_t size, mp_limb_t divisor); -C mp_limb_t mpn_mod_1c (mp_srcptr src, mp_size_t size, mp_limb_t divisor, -C mp_limb_t carry); -C -C The code here very similar to mpn_divrem_1, but with the quotient -C discarded. What's here probably isn't optimal. -C -C See mpn/x86/p6/mmx/divrem_1.c and mpn/x86/k7/mmx/mod_1.asm for some -C comments. - - -dnl MUL_THRESHOLD is the size at which the multiply by inverse method is -dnl used, rather than plain "divl"s. Minimum value 2. - -deflit(MUL_THRESHOLD, 4) - - -defframe(PARAM_CARRY, 16) -defframe(PARAM_DIVISOR,12) -defframe(PARAM_SIZE, 8) -defframe(PARAM_SRC, 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_STOP,-28) - -deflit(STACK_SPACE, 28) - - .text - ALIGN(16) - -PROLOGUE(mpn_mod_1c) -deflit(`FRAME',0) - movl PARAM_CARRY, %edx - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - jmp LF(mpn_mod_1,start_1c) - -EPILOGUE() - - - ALIGN(16) -PROLOGUE(mpn_mod_1) -deflit(`FRAME',0) - - movl $0, %edx C initial carry (if can't skip a div) - movl PARAM_SIZE, %ecx - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %esi, SAVE_ESI - movl PARAM_SRC, %esi - - movl %ebp, SAVE_EBP - movl PARAM_DIVISOR, %ebp - - orl %ecx, %ecx - jz L(divide_done) - - movl -4(%esi,%ecx,4), %eax C src high limb - - cmpl %ebp, %eax C carry flag if high n2 - leal (%ebp,%esi), %edx - - cmovc( %edx, %edi) C n - q1*d if underflow from using q1+1 - movd %mm0, %esi - cmpl %ebx, %ecx - - jne L(inverse_top) - - -L(inverse_loop_done): - - -C ----------------------------------------------------------------------------- - -L(inverse_two_left): - C eax scratch - C ebx scratch (nadj, q1) - C ecx &src[-1] - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 scratch (src dword) - C mm7 rshift - - movl %esi, %eax - movl %ebp, %ebx - - sarl $31, %eax C -n1 - - andl %eax, %ebx C -n1 & d - negl %eax C n1 - - addl %esi, %ebx C nadj = n10 + (-n1 & d), ignoring overflow - addl %edi, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - movd 4(%ecx), %mm0 C src low limb - - C - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - - sbbl $0, %ebx - movl %ebp, %eax C d - - mull %ebx C (q1+1)*d - - psllq $32, %mm0 - - psrlq %mm7, %mm0 - - C - - C - - subl %eax, %esi - - 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 - movd %mm0, %esi - - -C One limb left - - C eax scratch - C ebx scratch (nadj, q1) - C ecx - C edx scratch - C esi n10 - C edi n2 - C ebp divisor - C - C mm0 src limb, shifted - C mm7 rshift - - movl %esi, %eax - movl %ebp, %ebx - - sarl $31, %eax C -n1 - - andl %eax, %ebx C -n1 & d - negl %eax C n1 - - addl %esi, %ebx C nadj = n10 + (-n1 & d), ignoring overflow - addl %edi, %eax C n2+n1 - - mull VAR_INVERSE C m*(n2+n1) - - movl VAR_NORM, %ecx C for final denorm - - C - - C - - C - - addl %ebx, %eax C m*(n2+n1) + nadj, low giving carry flag - leal 1(%edi), %ebx C n2<<32 + m*(n2+n1)) - - adcl %edx, %ebx C 1 + high(n2<<32 + m*(n2+n1) + nadj) = q1+1 - - sbbl $0, %ebx - movl %ebp, %eax C d - - mull %ebx C (q1+1)*d - - movl SAVE_EBX, %ebx - - C - - C - - C - - subl %eax, %esi - - sbbl %edx, %edi C n - (q1+1)*d - leal (%ebp,%esi), %edx - movl SAVE_EBP, %ebp - - movl %esi, %eax C remainder - movl SAVE_ESI, %esi - - cmovc( %edx, %eax) C n - q1*d if underflow from using q1+1 - movl SAVE_EDI, %edi - - shrl %cl, %eax C denorm remainder - addl $STACK_SPACE, %esp - 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 src pointer - C edx - C esi n10 - C edi (n2) - C ebp divisor - - leal (%ebp,%esi), %edi C n-q*d remainder -> next n2 - movl VAR_SRC_STOP, %edx - psrlq %mm7, %mm0 - - movd %mm0, %esi C next n10 - cmpl %ecx, %edx - jne L(inverse_top) - - jmp L(inverse_loop_done) - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/p6/mmx/popham.asm b/rts/gmp/mpn/x86/p6/mmx/popham.asm deleted file mode 100644 index 50f9a11..0000000 --- a/rts/gmp/mpn/x86/p6/mmx/popham.asm +++ /dev/null @@ -1,31 +0,0 @@ -dnl Intel Pentium-II mpn_popcount, mpn_hamdist -- population count and -dnl hamming distance. -dnl -dnl P6MMX: popcount 11 cycles/limb (approx), hamdist 11.5 cycles/limb -dnl (approx) - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) -include_mpn(`x86/k6/mmx/popham.asm') diff --git a/rts/gmp/mpn/x86/p6/p3mmx/popham.asm b/rts/gmp/mpn/x86/p6/p3mmx/popham.asm deleted file mode 100644 index e63fbf3..0000000 --- a/rts/gmp/mpn/x86/p6/p3mmx/popham.asm +++ /dev/null @@ -1,30 +0,0 @@ -dnl Intel Pentium-III mpn_popcount, mpn_hamdist -- population count and -dnl hamming distance. - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl Haven't actually measured it, but the K7 code with the psadbw should be -dnl good on P-III. - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) -include_mpn(`x86/k7/mmx/popham.asm') diff --git a/rts/gmp/mpn/x86/p6/sqr_basecase.asm b/rts/gmp/mpn/x86/p6/sqr_basecase.asm deleted file mode 100644 index 174c784..0000000 --- a/rts/gmp/mpn/x86/p6/sqr_basecase.asm +++ /dev/null @@ -1,641 +0,0 @@ -dnl Intel P6 mpn_sqr_basecase -- square an mpn number. -dnl -dnl P6: approx 4.0 cycles per cross product, or 7.75 cycles per triangular -dnl product (measured on the speed difference between 20 and 40 limbs, -dnl which is the Karatsuba recursing range). - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -dnl These are the same as in mpn/x86/k6/sqr_basecase.asm, see that file for -dnl a description. The only difference here is that UNROLL_COUNT can go up -dnl to 64 (not 63) making KARATSUBA_SQR_THRESHOLD_MAX 67. - -deflit(KARATSUBA_SQR_THRESHOLD_MAX, 67) - -ifdef(`KARATSUBA_SQR_THRESHOLD_OVERRIDE', -`define(`KARATSUBA_SQR_THRESHOLD',KARATSUBA_SQR_THRESHOLD_OVERRIDE)') - -m4_config_gmp_mparam(`KARATSUBA_SQR_THRESHOLD') -deflit(UNROLL_COUNT, eval(KARATSUBA_SQR_THRESHOLD-3)) - - -C void mpn_sqr_basecase (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C The algorithm is basically 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 so -C it won't all get into 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 40x40 that do use the full -C unrolling will least be making good use of it, because 40x40 will take -C something like 7000 cycles. - -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, %edx - - movl PARAM_SRC, %eax - - cmpl $2, %edx - movl PARAM_DST, %ecx - je L(two_limbs) - - movl (%eax), %eax - ja L(three_or_more) - - -C ----------------------------------------------------------------------------- -C one limb only - C eax src limb - C ebx - C ecx dst - C edx - - mull %eax - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - - ret - - -C ----------------------------------------------------------------------------- -L(two_limbs): - C eax src - C ebx - C ecx dst - C edx - -defframe(SAVE_ESI, -4) -defframe(SAVE_EBX, -8) -defframe(SAVE_EDI, -12) -defframe(SAVE_EBP, -16) -deflit(`STACK_SPACE',16) - - subl $STACK_SPACE, %esp -deflit(`FRAME',STACK_SPACE) - - movl %esi, SAVE_ESI - movl %eax, %esi - movl (%eax), %eax - - mull %eax C src[0]^2 - - movl %eax, (%ecx) C dst[0] - movl 4(%esi), %eax - - movl %ebx, SAVE_EBX - movl %edx, %ebx C dst[1] - - mull %eax C src[1]^2 - - movl %edi, SAVE_EDI - movl %eax, %edi C dst[2] - movl (%esi), %eax - - movl %ebp, SAVE_EBP - movl %edx, %ebp C dst[3] - - mull 4(%esi) C src[0]*src[1] - - addl %eax, %ebx - movl SAVE_ESI, %esi - - adcl %edx, %edi - - adcl $0, %ebp - addl %ebx, %eax - movl SAVE_EBX, %ebx - - adcl %edi, %edx - movl SAVE_EDI, %edi - - adcl $0, %ebp - - movl %eax, 4(%ecx) - - movl %ebp, 12(%ecx) - movl SAVE_EBP, %ebp - - movl %edx, 8(%ecx) - addl $FRAME, %esp - - ret - - -C ----------------------------------------------------------------------------- -L(three_or_more): - C eax src low limb - C ebx - C ecx dst - C edx size -deflit(`FRAME',0) - - pushl %esi defframe_pushl(`SAVE_ESI') - cmpl $4, %edx - - movl PARAM_SRC, %esi - jae L(four_or_more) - - -C ----------------------------------------------------------------------------- -C three limbs - - C eax src low limb - C ebx - C ecx dst - C edx - C esi src - C edi - C ebp - - pushl %ebp defframe_pushl(`SAVE_EBP') - pushl %edi defframe_pushl(`SAVE_EDI') - - mull %eax C src[0] ^ 2 - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - - movl 4(%esi), %eax - xorl %ebp, %ebp - - mull %eax C src[1] ^ 2 - - movl %eax, 8(%ecx) - movl %edx, 12(%ecx) - movl 8(%esi), %eax - - pushl %ebx defframe_pushl(`SAVE_EBX') - - mull %eax C src[2] ^ 2 - - movl %eax, 16(%ecx) - movl %edx, 20(%ecx) - - movl (%esi), %eax - - mull 4(%esi) C src[0] * src[1] - - movl %eax, %ebx - movl %edx, %edi - - movl (%esi), %eax - - mull 8(%esi) C src[0] * src[2] - - addl %eax, %edi - movl %edx, %ebp - - adcl $0, %ebp - movl 4(%esi), %eax - - mull 8(%esi) C src[1] * src[2] - - xorl %esi, %esi - addl %eax, %ebp - - C eax - C ebx dst[1] - C ecx dst - C edx dst[4] - C esi zero, will be dst[5] - C edi dst[2] - C ebp dst[3] - - adcl $0, %edx - addl %ebx, %ebx - - adcl %edi, %edi - - adcl %ebp, %ebp - - adcl %edx, %edx - movl 4(%ecx), %eax - - adcl $0, %esi - addl %ebx, %eax - - movl %eax, 4(%ecx) - movl 8(%ecx), %eax - - adcl %edi, %eax - movl 12(%ecx), %ebx - - adcl %ebp, %ebx - movl 16(%ecx), %edi - - movl %eax, 8(%ecx) - movl SAVE_EBP, %ebp - - movl %ebx, 12(%ecx) - movl SAVE_EBX, %ebx - - adcl %edx, %edi - movl 20(%ecx), %eax - - movl %edi, 16(%ecx) - movl SAVE_EDI, %edi - - adcl %esi, %eax C no carry out of this - movl SAVE_ESI, %esi - - movl %eax, 20(%ecx) - addl $FRAME, %esp - - ret - - - -C ----------------------------------------------------------------------------- -defframe(VAR_COUNTER,-20) -defframe(VAR_JMP, -24) -deflit(`STACK_SPACE',24) - -L(four_or_more): - C eax src low limb - C ebx - C ecx - C edx size - C esi src - C edi - C ebp -deflit(`FRAME',4) dnl %esi already pushed - -C First multiply src[0]*src[1..size-1] and store at dst[1..size]. - - subl $STACK_SPACE-FRAME, %esp -deflit(`FRAME',STACK_SPACE) - movl $1, %ecx - - movl %edi, SAVE_EDI - movl PARAM_DST, %edi - - movl %ebx, SAVE_EBX - subl %edx, %ecx C -(size-1) - - movl %ebp, SAVE_EBP - movl $0, %ebx C initial carry - - leal (%esi,%edx,4), %esi C &src[size] - movl %eax, %ebp C multiplier - - leal -4(%edi,%edx,4), %edi C &dst[size-1] - - -C This loop runs at just over 6 c/l. - -L(mul_1): - C eax scratch - C ebx carry - C ecx counter, limbs, negative, -(size-1) to -1 - C edx scratch - C esi &src[size] - C edi &dst[size-1] - C ebp multiplier - - movl %ebp, %eax - - mull (%esi,%ecx,4) - - addl %ebx, %eax - movl $0, %ebx - - adcl %edx, %ebx - movl %eax, 4(%edi,%ecx,4) - - incl %ecx - jnz L(mul_1) - - - movl %ebx, 4(%edi) - - -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. - -dnl This is also hard-coded in the address calculation below. -deflit(CODE_BYTES_PER_LIMB, 15) - -dnl With &src[size] and &dst[size-1] pointers, the displacements in the -dnl unrolled code fit in a byte for UNROLL_COUNT values up to 32, but above -dnl that an offset must be added to them. -deflit(OFFSET, -ifelse(eval(UNROLL_COUNT>32),1, -eval((UNROLL_COUNT-32)*4), -0)) - - C eax - C ebx carry - C ecx - C edx - C esi &src[size] - C edi &dst[size-1] - C ebp - - movl PARAM_SIZE, %ecx - - subl $4, %ecx - jz L(corner) - - movl %ecx, %edx - negl %ecx - - shll $4, %ecx -ifelse(OFFSET,0,,`subl $OFFSET, %esi') - -ifdef(`PIC',` - call L(pic_calc) -L(here): -',` - leal L(unroll_inner_end)-eval(2*CODE_BYTES_PER_LIMB)(%ecx,%edx), %ecx -') - negl %edx - -ifelse(OFFSET,0,,`subl $OFFSET, %edi') - - C The calculated jump mustn't be before the start of the available - C code. This is the limit that UNROLL_COUNT puts on the src operand - C size, but checked here using the jump address directly. - - ASSERT(ae, - `movl_text_address( L(unroll_inner_start), %eax) - cmpl %eax, %ecx') - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(unroll_outer_top): - C eax - C ebx high limb to store - C ecx VAR_JMP - C edx VAR_COUNTER, limbs, negative - C esi &src[size], constant - C edi dst ptr, second highest limb of last addmul - C ebp - - movl -12+OFFSET(%esi,%edx,4), %ebp C multiplier - movl %edx, VAR_COUNTER - - movl -8+OFFSET(%esi,%edx,4), %eax C first limb of multiplicand - - mull %ebp - -define(cmovX,`ifelse(eval(UNROLL_COUNT%2),1,`cmovz($@)',`cmovnz($@)')') - - testb $1, %cl - - movl %edx, %ebx C high carry - leal 4(%edi), %edi - - movl %ecx, %edx C jump - - movl %eax, %ecx C low carry - leal CODE_BYTES_PER_LIMB(%edx), %edx - - cmovX( %ebx, %ecx) C high carry reverse - cmovX( %eax, %ebx) C low carry reverse - movl %edx, VAR_JMP - 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/ebx should start. - - ALIGN(2) - -L(unroll_inner_start): - C eax scratch - C ebx carry high - C ecx carry low - C edx scratch - C esi src pointer - C edi dst pointer - C ebp multiplier - C - C 15 code bytes each limb - C ecx/ebx reversed on each chunk - -forloop(`i', UNROLL_COUNT, 1, ` - deflit(`disp_src', eval(-i*4 + OFFSET)) - deflit(`disp_dst', eval(disp_src)) - - 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,(%esi), %eax) - mull %ebp -Zdisp( addl, %ebx, disp_dst,(%edi)) - adcl %eax, %ecx - movl %edx, %ebx - adcl $0, %ebx -',` - dnl this one comes out last -Zdisp( movl, disp_src,(%esi), %eax) - mull %ebp -Zdisp( addl, %ecx, disp_dst,(%edi)) - adcl %eax, %ebx - movl %edx, %ecx - adcl $0, %ecx -') -') -L(unroll_inner_end): - - addl %ebx, m4_empty_if_zero(OFFSET)(%edi) - - movl VAR_COUNTER, %edx - adcl $0, %ecx - - movl %ecx, m4_empty_if_zero(OFFSET+4)(%edi) - movl VAR_JMP, %ecx - - incl %edx - jnz L(unroll_outer_top) - - -ifelse(OFFSET,0,,` - addl $OFFSET, %esi - addl $OFFSET, %edi -') - - -C ----------------------------------------------------------------------------- - ALIGN(16) -L(corner): - C eax - C ebx - C ecx - C edx - C esi &src[size] - C edi &dst[2*size-5] - C ebp - - movl -12(%esi), %eax - - mull -8(%esi) - - addl %eax, (%edi) - movl -12(%esi), %eax - movl $0, %ebx - - adcl %edx, %ebx - - mull -4(%esi) - - addl %eax, %ebx - movl -8(%esi), %eax - - adcl $0, %edx - - addl %ebx, 4(%edi) - movl $0, %ebx - - adcl %edx, %ebx - - mull -4(%esi) - - movl PARAM_SIZE, %ecx - addl %ebx, %eax - - adcl $0, %edx - - movl %eax, 8(%edi) - - movl %edx, 12(%edi) - movl PARAM_DST, %edi - - -C Left shift of dst[1..2*size-2], the bit shifted out becomes dst[2*size-1]. - - subl $1, %ecx C size-1 - xorl %eax, %eax C ready for final adcl, and clear carry - - movl %ecx, %edx - movl PARAM_SRC, %esi - - -L(lshift): - C eax - C ebx - C ecx counter, size-1 to 1 - C edx size-1 (for later use) - C esi src (for later use) - C edi dst, incrementing - C ebp - - rcll 4(%edi) - rcll 8(%edi) - - leal 8(%edi), %edi - decl %ecx - jnz L(lshift) - - - adcl %eax, %eax - - movl %eax, 4(%edi) C dst most significant limb - movl (%esi), %eax C src[0] - - leal 4(%esi,%edx,4), %esi C &src[size] - subl %edx, %ecx C -(size-1) - - -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] - - -L(diag): - C eax scratch - C ebx scratch - C ecx counter, negative - C edx carry - C esi &src[size] - C edi dst[2*size-2] - C ebp - - movl (%esi,%ecx,4), %eax - movl %edx, %ebx - - mull %eax - - addl %ebx, 4(%edi,%ecx,8) - adcl %eax, 8(%edi,%ecx,8) - adcl $0, %edx - - incl %ecx - jnz L(diag) - - - movl SAVE_ESI, %esi - movl SAVE_EBX, %ebx - - 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): - addl (%esp), %ecx - addl $L(unroll_inner_end)-L(here)-eval(2*CODE_BYTES_PER_LIMB), %ecx - addl %edx, %ecx - ret -') - - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/README b/rts/gmp/mpn/x86/pentium/README deleted file mode 100644 index 3b9ec8a..0000000 --- a/rts/gmp/mpn/x86/pentium/README +++ /dev/null @@ -1,77 +0,0 @@ - - INTEL PENTIUM P5 MPN SUBROUTINES - - -This directory contains mpn functions optimized for Intel Pentium (P5,P54) -processors. The mmx subdirectory has code for Pentium with MMX (P55). - - -STATUS - - cycles/limb - - mpn_add_n/sub_n 2.375 - - mpn_copyi/copyd 1.0 - - mpn_divrem_1 44.0 - mpn_mod_1 44.0 - mpn_divexact_by3 15.0 - - mpn_l/rshift 5.375 normal (6.0 on P54) - 1.875 special shift by 1 bit - - mpn_mul_1 13.0 - mpn_add/submul_1 14.0 - - mpn_mul_basecase 14.2 cycles/crossproduct (approx) - - mpn_sqr_basecase 8 cycles/crossproduct (approx) - or 15.5 cycles/triangleproduct (approx) - -Pentium MMX gets the following improvements - - mpn_l/rshift 1.75 - - -1. mpn_lshift and mpn_rshift run at about 6 cycles/limb on P5 and P54, but the -documentation indicates that they should take only 43/8 = 5.375 cycles/limb, -or 5 cycles/limb asymptotically. The P55 runs them at the expected speed. - -2. mpn_add_n and mpn_sub_n run at asymptotically 2 cycles/limb. Due to loop -overhead and other delays (cache refill?), they run at or near 2.5 cycles/limb. - -3. mpn_mul_1, mpn_addmul_1, mpn_submul_1 all run 1 cycle faster than they -should. Intel documentation says a mul instruction is 10 cycles, but it -measures 9 and the routines using it run with it as 9. - - - -RELEVANT OPTIMIZATION ISSUES - -1. Pentium doesn't allocate cache lines on writes, unlike most other modern -processors. Since the functions in the mpn class do array writes, we have to -handle allocating the destination cache lines by reading a word from it in the -loops, to achieve the best performance. - -2. Pairing of memory operations requires that the two issued operations refer -to different cache banks. The simplest way to insure this is to read/write -two words from the same object. If we make operations on different objects, -they might or might not be to the same cache bank. - - - -REFERENCES - -"Intel Architecture Optimization Manual", 1997, order number 242816. This -is mostly about P5, the parts about P6 aren't relevant. Available on-line: - - http://download.intel.com/design/PentiumII/manuals/242816.htm - - - ----------------- -Local variables: -mode: text -fill-column: 76 -End: diff --git a/rts/gmp/mpn/x86/pentium/aors_n.asm b/rts/gmp/mpn/x86/pentium/aors_n.asm deleted file mode 100644 index a61082a..0000000 --- a/rts/gmp/mpn/x86/pentium/aors_n.asm +++ /dev/null @@ -1,196 +0,0 @@ -dnl Intel Pentium mpn_add_n/mpn_sub_n -- mpn addition and subtraction. -dnl -dnl P5: 2.375 cycles/limb - - -dnl Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST,%edi - movl PARAM_SRC1,%esi - movl PARAM_SRC2,%ebp - movl PARAM_SIZE,%ecx - - movl (%ebp),%ebx - - decl %ecx - movl %ecx,%edx - shrl $3,%ecx - andl $7,%edx - testl %ecx,%ecx C zero carry flag - jz L(endgo) - - pushl %edx -FRAME_pushl() - movl PARAM_CARRY,%eax - shrl $1,%eax C shift bit 0 into carry - jmp LF(M4_function_n,oop) - -L(endgo): -deflit(`FRAME',16) - movl PARAM_CARRY,%eax - shrl $1,%eax C shift bit 0 into carry - jmp LF(M4_function_n,end) - -EPILOGUE() - - - ALIGN(8) -PROLOGUE(M4_function_n) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST,%edi - movl PARAM_SRC1,%esi - movl PARAM_SRC2,%ebp - movl PARAM_SIZE,%ecx - - movl (%ebp),%ebx - - decl %ecx - movl %ecx,%edx - shrl $3,%ecx - andl $7,%edx - testl %ecx,%ecx C zero carry flag - jz L(end) - pushl %edx -FRAME_pushl() - - ALIGN(8) -L(oop): movl 28(%edi),%eax C fetch destination cache line - leal 32(%edi),%edi - -L(1): movl (%esi),%eax - movl 4(%esi),%edx - M4_inst %ebx,%eax - movl 4(%ebp),%ebx - M4_inst %ebx,%edx - movl 8(%ebp),%ebx - movl %eax,-32(%edi) - movl %edx,-28(%edi) - -L(2): movl 8(%esi),%eax - movl 12(%esi),%edx - M4_inst %ebx,%eax - movl 12(%ebp),%ebx - M4_inst %ebx,%edx - movl 16(%ebp),%ebx - movl %eax,-24(%edi) - movl %edx,-20(%edi) - -L(3): movl 16(%esi),%eax - movl 20(%esi),%edx - M4_inst %ebx,%eax - movl 20(%ebp),%ebx - M4_inst %ebx,%edx - movl 24(%ebp),%ebx - movl %eax,-16(%edi) - movl %edx,-12(%edi) - -L(4): movl 24(%esi),%eax - movl 28(%esi),%edx - M4_inst %ebx,%eax - movl 28(%ebp),%ebx - M4_inst %ebx,%edx - movl 32(%ebp),%ebx - movl %eax,-8(%edi) - movl %edx,-4(%edi) - - leal 32(%esi),%esi - leal 32(%ebp),%ebp - decl %ecx - jnz L(oop) - - popl %edx -FRAME_popl() -L(end): - decl %edx C test %edx w/o clobbering carry - js L(end2) - incl %edx -L(oop2): - leal 4(%edi),%edi - movl (%esi),%eax - M4_inst %ebx,%eax - movl 4(%ebp),%ebx - movl %eax,-4(%edi) - leal 4(%esi),%esi - leal 4(%ebp),%ebp - decl %edx - jnz L(oop2) -L(end2): - movl (%esi),%eax - M4_inst %ebx,%eax - movl %eax,(%edi) - - sbbl %eax,%eax - negl %eax - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/aorsmul_1.asm b/rts/gmp/mpn/x86/pentium/aorsmul_1.asm deleted file mode 100644 index 147b556..0000000 --- a/rts/gmp/mpn/x86/pentium/aorsmul_1.asm +++ /dev/null @@ -1,99 +0,0 @@ -dnl Intel Pentium mpn_addmul_1 -- mpn by limb multiplication. -dnl -dnl P5: 14.0 cycles/limb - - -dnl Copyright (C) 1992, 1994, 1996, 1999, 2000 Free Software Foundation, -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. */ - - -include(`../config.m4') - - -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); - -defframe(PARAM_MULTIPLIER,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) - -PROLOGUE(M4_function_1) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST, %edi - movl PARAM_SRC, %esi - movl PARAM_SIZE, %ecx - movl PARAM_MULTIPLIER, %ebp - - leal (%edi,%ecx,4), %edi - leal (%esi,%ecx,4), %esi - negl %ecx - xorl %ebx, %ebx - ALIGN(8) - -L(oop): adcl $0, %ebx - movl (%esi,%ecx,4), %eax - - mull %ebp - - addl %ebx, %eax - movl (%edi,%ecx,4), %ebx - - adcl $0, %edx - M4_inst %eax, %ebx - - movl %ebx, (%edi,%ecx,4) - incl %ecx - - movl %edx, %ebx - jnz L(oop) - - adcl $0, %ebx - movl %ebx, %eax - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/diveby3.asm b/rts/gmp/mpn/x86/pentium/diveby3.asm deleted file mode 100644 index dbac816..0000000 --- a/rts/gmp/mpn/x86/pentium/diveby3.asm +++ /dev/null @@ -1,183 +0,0 @@ -dnl Intel P5 mpn_divexact_by3 -- mpn division by 3, expecting no remainder. -dnl -dnl P5: 15.0 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_divexact_by3c (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t carry); - -defframe(PARAM_CARRY,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - -dnl multiplicative inverse of 3, modulo 2^32 -deflit(INVERSE_3, 0xAAAAAAAB) - -dnl ceil(b/3), ceil(b*2/3) and floor(b*2/3) where b=2^32 -deflit(ONE_THIRD_CEIL, 0x55555556) -deflit(TWO_THIRDS_CEIL, 0xAAAAAAAB) -deflit(TWO_THIRDS_FLOOR, 0xAAAAAAAA) - - .text - ALIGN(8) - -PROLOGUE(mpn_divexact_by3c) -deflit(`FRAME',0) - - movl PARAM_SRC, %ecx - movl PARAM_SIZE, %edx - - decl %edx - jnz L(two_or_more) - - movl (%ecx), %edx - movl PARAM_CARRY, %eax C risk of cache bank clash here - - movl PARAM_DST, %ecx - subl %eax, %edx - - sbbl %eax, %eax C 0 or -1 - - imull $INVERSE_3, %edx, %edx - - negl %eax C 0 or 1 - cmpl $ONE_THIRD_CEIL, %edx - - sbbl $-1, %eax C +1 if edx>=ceil(b/3) - cmpl $TWO_THIRDS_CEIL, %edx - - sbbl $-1, %eax C +1 if edx>=ceil(b*2/3) - movl %edx, (%ecx) - - ret - - -L(two_or_more): - C eax - C ebx - C ecx src - C edx size-1 - C esi - C edi - C ebp - - pushl %ebx FRAME_pushl() - pushl %esi FRAME_pushl() - - pushl %edi FRAME_pushl() - pushl %ebp FRAME_pushl() - - movl PARAM_DST, %edi - movl PARAM_CARRY, %esi - - movl (%ecx), %eax C src low limb - xorl %ebx, %ebx - - sub %esi, %eax - movl $TWO_THIRDS_FLOOR, %esi - - leal (%ecx,%edx,4), %ecx C &src[size-1] - leal (%edi,%edx,4), %edi C &dst[size-1] - - adcl $0, %ebx C carry, 0 or 1 - negl %edx C -(size-1) - - -C The loop needs a source limb ready at the top, which leads to one limb -C handled separately at the end, and the special case above for size==1. -C There doesn't seem to be any scheduling that would keep the speed but move -C the source load and carry subtract up to the top. -C -C The destination cache line prefetching adds 1 cycle to the loop but is -C considered worthwhile. The slowdown is a factor of 1.07, but will prevent -C repeated write-throughs if the destination isn't in L1. A version using -C an outer loop to prefetch only every 8 limbs (a cache line) proved to be -C no faster, due to unavoidable branch mispreditions in the inner loop. -C -C setc is 2 cycles on P54, so an adcl is used instead. If the movl $0,%ebx -C could be avoided then the src limb fetch could pair up and save a cycle. -C This would probably mean going to a two limb loop with the carry limb -C alternately positive or negative, since an sbbl %ebx,%ebx will leave a -C value which is in the opposite sense to the preceding sbbl/adcl %ebx,%eax. -C -C A register is used for TWO_THIRDS_FLOOR because a cmp can't be done as -C "cmpl %edx, $n" with the immediate as the second operand. -C -C The "4" source displacement is in the loop rather than the setup because -C this gets L(top) aligned to 8 bytes at no cost. - - ALIGN(8) -L(top): - C eax source limb, carry subtracted - C ebx carry (0 or 1) - C ecx &src[size-1] - C edx counter, limbs, negative - C esi TWO_THIRDS_FLOOR - C edi &dst[size-1] - C ebp scratch (result limb) - - imull $INVERSE_3, %eax, %ebp - - cmpl $ONE_THIRD_CEIL, %ebp - movl (%edi,%edx,4), %eax C dst cache line prefetch - - sbbl $-1, %ebx C +1 if ebp>=ceil(b/3) - cmpl %ebp, %esi - - movl 4(%ecx,%edx,4), %eax C next src limb - - sbbl %ebx, %eax C and further -1 if ebp>=ceil(b*2/3) - movl $0, %ebx - - adcl $0, %ebx C new carry - movl %ebp, (%edi,%edx,4) - - incl %edx - jnz L(top) - - - - imull $INVERSE_3, %eax, %edx - - cmpl $ONE_THIRD_CEIL, %edx - movl %edx, (%edi) - - sbbl $-1, %ebx C +1 if edx>=ceil(b/3) - cmpl $TWO_THIRDS_CEIL, %edx - - sbbl $-1, %ebx C +1 if edx>=ceil(b*2/3) - popl %ebp - - movl %ebx, %eax - popl %edi - - popl %esi - popl %ebx - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/gmp-mparam.h b/rts/gmp/mpn/x86/pentium/gmp-mparam.h deleted file mode 100644 index d3ed3d7..0000000 --- a/rts/gmp/mpn/x86/pentium/gmp-mparam.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Intel P54 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -#ifndef UMUL_TIME -#define UMUL_TIME 9 /* cycles */ -#endif -#ifndef UDIV_TIME -#define UDIV_TIME 41 /* cycles */ -#endif - -/* bsf takes 18-42 cycles, put an average for uniform random numbers */ -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 20 /* cycles */ -#endif - - -/* Generated by tuneup.c, 2000-07-06. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 14 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 179 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 22 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 153 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 46 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 110 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 13 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 4 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 25 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 496, 928, 1920, 4608, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 512 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 3840 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 496, 1184, 1920, 5632, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 512 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 3840 -#endif diff --git a/rts/gmp/mpn/x86/pentium/lshift.asm b/rts/gmp/mpn/x86/pentium/lshift.asm deleted file mode 100644 index e1e35d4..0000000 --- a/rts/gmp/mpn/x86/pentium/lshift.asm +++ /dev/null @@ -1,236 +0,0 @@ -dnl Intel Pentium mpn_lshift -- mpn left shift. -dnl -dnl cycles/limb -dnl P5,P54: 6.0 -dnl P55: 5.375 - - -dnl Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_lshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C The main shift-by-N loop should run at 5.375 c/l and that's what P55 does, -C but P5 and P54 run only at 6.0 c/l, which is 4 cycles lost somewhere. - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_lshift) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST,%edi - movl PARAM_SRC,%esi - movl PARAM_SIZE,%ebp - movl PARAM_SHIFT,%ecx - -C We can use faster code for shift-by-1 under certain conditions. - cmp $1,%ecx - jne L(normal) - leal 4(%esi),%eax - cmpl %edi,%eax - jnc L(special) C jump if s_ptr + 1 >= res_ptr - leal (%esi,%ebp,4),%eax - cmpl %eax,%edi - jnc L(special) C jump if res_ptr >= s_ptr + size - -L(normal): - leal -4(%edi,%ebp,4),%edi - leal -4(%esi,%ebp,4),%esi - - movl (%esi),%edx - subl $4,%esi - xorl %eax,%eax - shldl( %cl, %edx, %eax) C compute carry limb - pushl %eax C push carry limb onto stack - - decl %ebp - pushl %ebp - shrl $3,%ebp - jz L(end) - - movl (%edi),%eax C fetch destination cache line - - ALIGN(4) -L(oop): movl -28(%edi),%eax C fetch destination cache line - movl %edx,%ebx - - movl (%esi),%eax - movl -4(%esi),%edx - shldl( %cl, %eax, %ebx) - shldl( %cl, %edx, %eax) - movl %ebx,(%edi) - movl %eax,-4(%edi) - - movl -8(%esi),%ebx - movl -12(%esi),%eax - shldl( %cl, %ebx, %edx) - shldl( %cl, %eax, %ebx) - movl %edx,-8(%edi) - movl %ebx,-12(%edi) - - movl -16(%esi),%edx - movl -20(%esi),%ebx - shldl( %cl, %edx, %eax) - shldl( %cl, %ebx, %edx) - movl %eax,-16(%edi) - movl %edx,-20(%edi) - - movl -24(%esi),%eax - movl -28(%esi),%edx - shldl( %cl, %eax, %ebx) - shldl( %cl, %edx, %eax) - movl %ebx,-24(%edi) - movl %eax,-28(%edi) - - subl $32,%esi - subl $32,%edi - decl %ebp - jnz L(oop) - -L(end): popl %ebp - andl $7,%ebp - jz L(end2) -L(oop2): - movl (%esi),%eax - shldl( %cl,%eax,%edx) - movl %edx,(%edi) - movl %eax,%edx - subl $4,%esi - subl $4,%edi - decl %ebp - jnz L(oop2) - -L(end2): - shll %cl,%edx C compute least significant limb - movl %edx,(%edi) C store it - - popl %eax C pop carry limb - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - - -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(special): - movl (%esi),%edx - addl $4,%esi - - decl %ebp - pushl %ebp - shrl $3,%ebp - - addl %edx,%edx - incl %ebp - decl %ebp - jz L(Lend) - - movl (%edi),%eax C fetch destination cache line - - ALIGN(4) -L(Loop): - movl 28(%edi),%eax C fetch destination cache line - movl %edx,%ebx - - movl (%esi),%eax - movl 4(%esi),%edx - adcl %eax,%eax - movl %ebx,(%edi) - adcl %edx,%edx - movl %eax,4(%edi) - - movl 8(%esi),%ebx - movl 12(%esi),%eax - adcl %ebx,%ebx - movl %edx,8(%edi) - adcl %eax,%eax - movl %ebx,12(%edi) - - movl 16(%esi),%edx - movl 20(%esi),%ebx - adcl %edx,%edx - movl %eax,16(%edi) - adcl %ebx,%ebx - movl %edx,20(%edi) - - movl 24(%esi),%eax - movl 28(%esi),%edx - adcl %eax,%eax - movl %ebx,24(%edi) - adcl %edx,%edx - movl %eax,28(%edi) - - leal 32(%esi),%esi C use leal not to clobber carry - leal 32(%edi),%edi - decl %ebp - jnz L(Loop) - -L(Lend): - popl %ebp - sbbl %eax,%eax C save carry in %eax - andl $7,%ebp - jz L(Lend2) - addl %eax,%eax C restore carry from eax -L(Loop2): - movl %edx,%ebx - movl (%esi),%edx - adcl %edx,%edx - movl %ebx,(%edi) - - leal 4(%esi),%esi C use leal not to clobber carry - leal 4(%edi),%edi - decl %ebp - jnz L(Loop2) - - jmp L(L1) -L(Lend2): - addl %eax,%eax C restore carry from eax -L(L1): movl %edx,(%edi) C store last limb - - sbbl %eax,%eax - negl %eax - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/mmx/gmp-mparam.h b/rts/gmp/mpn/x86/pentium/mmx/gmp-mparam.h deleted file mode 100644 index 2379077..0000000 --- a/rts/gmp/mpn/x86/pentium/mmx/gmp-mparam.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Intel P55 gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - - -#define BITS_PER_MP_LIMB 32 -#define BYTES_PER_MP_LIMB 4 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 32 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 - - -#ifndef UMUL_TIME -#define UMUL_TIME 9 /* cycles */ -#endif -#ifndef UDIV_TIME -#define UDIV_TIME 41 /* cycles */ -#endif - -/* bsf takes 18-42 cycles, put an average for uniform random numbers */ -#ifndef COUNT_TRAILING_ZEROS_TIME -#define COUNT_TRAILING_ZEROS_TIME 20 /* cycles */ -#endif - - -/* Generated by tuneup.c, 2000-07-06. */ - -#ifndef KARATSUBA_MUL_THRESHOLD -#define KARATSUBA_MUL_THRESHOLD 14 -#endif -#ifndef TOOM3_MUL_THRESHOLD -#define TOOM3_MUL_THRESHOLD 99 -#endif - -#ifndef KARATSUBA_SQR_THRESHOLD -#define KARATSUBA_SQR_THRESHOLD 22 -#endif -#ifndef TOOM3_SQR_THRESHOLD -#define TOOM3_SQR_THRESHOLD 89 -#endif - -#ifndef BZ_THRESHOLD -#define BZ_THRESHOLD 40 -#endif - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 98 -#endif - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD 13 -#endif - -#ifndef GCD_ACCEL_THRESHOLD -#define GCD_ACCEL_THRESHOLD 5 -#endif -#ifndef GCDEXT_THRESHOLD -#define GCDEXT_THRESHOLD 25 -#endif - -#ifndef FFT_MUL_TABLE -#define FFT_MUL_TABLE { 496, 1056, 1920, 4608, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_MUL_THRESHOLD -#define FFT_MODF_MUL_THRESHOLD 512 -#endif -#ifndef FFT_MUL_THRESHOLD -#define FFT_MUL_THRESHOLD 3840 -#endif - -#ifndef FFT_SQR_TABLE -#define FFT_SQR_TABLE { 496, 1184, 2176, 5632, 14336, 40960, 0 } -#endif -#ifndef FFT_MODF_SQR_THRESHOLD -#define FFT_MODF_SQR_THRESHOLD 512 -#endif -#ifndef FFT_SQR_THRESHOLD -#define FFT_SQR_THRESHOLD 4352 -#endif diff --git a/rts/gmp/mpn/x86/pentium/mmx/lshift.asm b/rts/gmp/mpn/x86/pentium/mmx/lshift.asm deleted file mode 100644 index 2225438..0000000 --- a/rts/gmp/mpn/x86/pentium/mmx/lshift.asm +++ /dev/null @@ -1,455 +0,0 @@ -dnl Intel P5 mpn_lshift -- mpn left shift. -dnl -dnl P5: 1.75 cycles/limb. - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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. Return the bits shifted out at the -C left. -C -C The comments in mpn_rshift apply here too. - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -dnl minimum 5, because the unrolled loop can't handle less -deflit(UNROLL_THRESHOLD, 5) - - .text - ALIGN(8) - -PROLOGUE(mpn_lshift) - - pushl %ebx - pushl %edi -deflit(`FRAME',8) - - movl PARAM_SIZE, %eax - movl PARAM_DST, %edx - - movl PARAM_SRC, %ebx - movl PARAM_SHIFT, %ecx - - cmp $UNROLL_THRESHOLD, %eax - jae L(unroll) - - movl -4(%ebx,%eax,4), %edi C src high limb - decl %eax - - jnz L(simple) - - shldl( %cl, %edi, %eax) C eax was decremented to zero - - shll %cl, %edi - - movl %edi, (%edx) C dst low limb - popl %edi C risk of data cache bank clash - - popl %ebx - - ret - - -C ----------------------------------------------------------------------------- -L(simple): - C eax size-1 - C ebx src - C ecx shift - C edx dst - C esi - C edi - C ebp -deflit(`FRAME',8) - - movd (%ebx,%eax,4), %mm5 C src high limb - - movd %ecx, %mm6 C lshift - negl %ecx - - psllq %mm6, %mm5 - addl $32, %ecx - - movd %ecx, %mm7 - psrlq $32, %mm5 C retval - - -L(simple_top): - C eax counter, limbs, negative - C ebx src - C ecx - C edx dst - C esi - C edi - C - C mm0 scratch - C mm5 return value - C mm6 shift - C mm7 32-shift - - movq -4(%ebx,%eax,4), %mm0 - decl %eax - - psrlq %mm7, %mm0 - - C - - movd %mm0, 4(%edx,%eax,4) - jnz L(simple_top) - - - movd (%ebx), %mm0 - - movd %mm5, %eax - psllq %mm6, %mm0 - - popl %edi - popl %ebx - - movd %mm0, (%edx) - - emms - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(unroll): - C eax size - C ebx src - C ecx shift - C edx dst - C esi - C edi - C ebp -deflit(`FRAME',8) - - movd -4(%ebx,%eax,4), %mm5 C src high limb - leal (%ebx,%eax,4), %edi - - movd %ecx, %mm6 C lshift - andl $4, %edi - - psllq %mm6, %mm5 - jz L(start_src_aligned) - - - C src isn't aligned, process high limb separately (marked xxx) to - C make it so. - C - C source -8(ebx,%eax,4) - C | - C +-------+-------+-------+-- - C | | - C +-------+-------+-------+-- - C 0mod8 4mod8 0mod8 - C - C dest - C -4(edx,%eax,4) - C | - C +-------+-------+-- - C | xxx | | - C +-------+-------+-- - - movq -8(%ebx,%eax,4), %mm0 C unaligned load - - psllq %mm6, %mm0 - decl %eax - - psrlq $32, %mm0 - - C - - movd %mm0, (%edx,%eax,4) -L(start_src_aligned): - - movq -8(%ebx,%eax,4), %mm1 C src high qword - leal (%edx,%eax,4), %edi - - andl $4, %edi - psrlq $32, %mm5 C return value - - movq -16(%ebx,%eax,4), %mm3 C src second highest qword - jz L(start_dst_aligned) - - C dst isn't aligned, subtract 4 to make it so, and pretend the shift - C is 32 bits extra. High limb of dst (marked xxx) handled here - C separately. - C - C source -8(ebx,%eax,4) - C | - C +-------+-------+-- - C | mm1 | - C +-------+-------+-- - C 0mod8 4mod8 - C - C dest - C -4(edx,%eax,4) - C | - C +-------+-------+-------+-- - C | xxx | | - C +-------+-------+-------+-- - C 0mod8 4mod8 0mod8 - - movq %mm1, %mm0 - addl $32, %ecx C new shift - - psllq %mm6, %mm0 - - movd %ecx, %mm6 - psrlq $32, %mm0 - - C wasted cycle here waiting for %mm0 - - movd %mm0, -4(%edx,%eax,4) - subl $4, %edx -L(start_dst_aligned): - - - psllq %mm6, %mm1 - negl %ecx C -shift - - addl $64, %ecx C 64-shift - movq %mm3, %mm2 - - movd %ecx, %mm7 - subl $8, %eax C size-8 - - psrlq %mm7, %mm3 - - por %mm1, %mm3 C mm3 ready to store - jc L(finish) - - - C The comments in mpn_rshift apply here too. - - ALIGN(8) -L(unroll_loop): - C eax counter, limbs - C ebx src - C ecx - C edx dst - C esi - C edi - C - C mm0 - C mm1 - C mm2 src qword from 48(%ebx,%eax,4) - C mm3 dst qword ready to store to 56(%edx,%eax,4) - C - C mm5 return value - C mm6 lshift - C mm7 rshift - - movq 8(%ebx,%eax,4), %mm0 - psllq %mm6, %mm2 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - movq %mm3, 24(%edx,%eax,4) C prev - por %mm2, %mm0 - - movq (%ebx,%eax,4), %mm3 C - psllq %mm6, %mm1 C - - movq %mm0, 16(%edx,%eax,4) - movq %mm3, %mm2 C - - psrlq %mm7, %mm3 C - subl $4, %eax - - por %mm1, %mm3 C - jnc L(unroll_loop) - - - -L(finish): - C eax -4 to -1 representing respectively 0 to 3 limbs remaining - - testb $2, %al - - jz L(finish_no_two) - - movq 8(%ebx,%eax,4), %mm0 - psllq %mm6, %mm2 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - movq %mm3, 24(%edx,%eax,4) C prev - por %mm2, %mm0 - - movq %mm1, %mm2 - movq %mm0, %mm3 - - subl $2, %eax -L(finish_no_two): - - - C eax -4 or -3 representing respectively 0 or 1 limbs remaining - C - C mm2 src prev qword, from 48(%ebx,%eax,4) - C mm3 dst qword, for 56(%edx,%eax,4) - - testb $1, %al - movd %mm5, %eax C retval - - popl %edi - jz L(finish_zero) - - - C One extra src limb, destination was aligned. - C - C source ebx - C --+---------------+-------+ - C | mm2 | | - C --+---------------+-------+ - C - C dest edx+12 edx+4 edx - C --+---------------+---------------+-------+ - C | mm3 | | | - C --+---------------+---------------+-------+ - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C One extra src limb, destination was unaligned. - C - C source ebx - C --+---------------+-------+ - C | mm2 | | - C --+---------------+-------+ - C - C dest edx+12 edx+4 - C --+---------------+---------------+ - C | mm3 | | - 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 4(%edx), 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 (%ebx), %mm0 - psllq %mm6, %mm2 - - movq %mm3, 12(%edx) - psllq $32, %mm0 - - movq %mm0, %mm1 - psrlq %mm7, %mm0 - - por %mm2, %mm0 - psllq %mm6, %mm1 - - movq %mm0, 4(%edx) - psrlq $32, %mm1 - - andl $32, %ecx - popl %ebx - - jz L(finish_one_unaligned) - - movd %mm1, (%edx) -L(finish_one_unaligned): - - emms - - ret - - -L(finish_zero): - - C No extra src limbs, destination was aligned. - C - C source ebx - C --+---------------+ - C | mm2 | - C --+---------------+ - C - C dest edx+8 edx - C --+---------------+---------------+ - C | mm3 | | - C --+---------------+---------------+ - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C No extra src limbs, destination was unaligned. - C - C source ebx - C --+---------------+ - C | mm2 | - C --+---------------+ - C - C dest edx+8 edx+4 - C --+---------------+-------+ - C | mm3 | | - C --+---------------+-------+ - C - C mm6 = shift+32 - C mm7 = ecx = 64-(shift+32) - - - C The movd for the unaligned case writes the same data to 4(%edx) - C that the movq does for the aligned case. - - - movq %mm3, 8(%edx) - andl $32, %ecx - - psllq %mm6, %mm2 - jz L(finish_zero_unaligned) - - movq %mm2, (%edx) -L(finish_zero_unaligned): - - psrlq $32, %mm2 - popl %ebx - - movd %mm5, %eax C retval - - movd %mm2, 4(%edx) - - emms - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/mmx/popham.asm b/rts/gmp/mpn/x86/pentium/mmx/popham.asm deleted file mode 100644 index 587a07a..0000000 --- a/rts/gmp/mpn/x86/pentium/mmx/popham.asm +++ /dev/null @@ -1,30 +0,0 @@ -dnl Intel P55 mpn_popcount, mpn_hamdist -- population count and hamming -dnl distance. -dnl -dnl P55: popcount 11.5 cycles/limb, hamdist 12.0 cycles/limb - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - -MULFUNC_PROLOGUE(mpn_popcount mpn_hamdist) -include_mpn(`x86/k6/mmx/popham.asm') diff --git a/rts/gmp/mpn/x86/pentium/mmx/rshift.asm b/rts/gmp/mpn/x86/pentium/mmx/rshift.asm deleted file mode 100644 index 7672630..0000000 --- a/rts/gmp/mpn/x86/pentium/mmx/rshift.asm +++ /dev/null @@ -1,460 +0,0 @@ -dnl Intel P5 mpn_rshift -- mpn right shift. -dnl -dnl P5: 1.75 cycles/limb. - - -dnl Copyright (C) 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -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. Return the bits shifted out at the -C right. -C -C It takes 6 mmx instructions to process 2 limbs, making 1.5 cycles/limb, -C and with a 4 limb loop and 1 cycle of loop overhead the total is 1.75 c/l. -C -C Full speed depends on source and destination being aligned. Unaligned mmx -C loads and stores on P5 don't pair and have a 2 cycle penalty. Some hairy -C setups and finish-ups are done to ensure alignment for the loop. -C -C MMX shifts work out a bit faster even for the simple loop. - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) -deflit(`FRAME',0) - -dnl Minimum 5, because the unrolled loop can't handle less. -deflit(UNROLL_THRESHOLD, 5) - - .text - ALIGN(8) - -PROLOGUE(mpn_rshift) - - pushl %ebx - pushl %edi -deflit(`FRAME',8) - - movl PARAM_SIZE, %eax - movl PARAM_DST, %edx - - movl PARAM_SRC, %ebx - movl PARAM_SHIFT, %ecx - - cmp $UNROLL_THRESHOLD, %eax - jae L(unroll) - - decl %eax - movl (%ebx), %edi C src low limb - - jnz L(simple) - - shrdl( %cl, %edi, %eax) C eax was decremented to zero - - shrl %cl, %edi - - movl %edi, (%edx) C dst low limb - popl %edi C risk of data cache bank clash - - popl %ebx - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(simple): - C eax size-1 - C ebx src - C ecx shift - C edx dst - C esi - C edi - C ebp -deflit(`FRAME',8) - - movd (%ebx), %mm5 C src[0] - leal (%ebx,%eax,4), %ebx C &src[size-1] - - movd %ecx, %mm6 C rshift - leal -4(%edx,%eax,4), %edx C &dst[size-2] - - psllq $32, %mm5 - negl %eax - - -C This loop is 5 or 8 cycles, with every second load unaligned and a wasted -C cycle waiting for the mm0 result to be ready. For comparison a shrdl is 4 -C cycles and would be 8 in a simple loop. Using mmx helps the return value -C and last limb calculations too. - -L(simple_top): - C eax counter, limbs, negative - C ebx &src[size-1] - C ecx return value - C edx &dst[size-2] - C - C mm0 scratch - C mm5 return value - C mm6 shift - - movq (%ebx,%eax,4), %mm0 - incl %eax - - psrlq %mm6, %mm0 - - movd %mm0, (%edx,%eax,4) - jnz L(simple_top) - - - movd (%ebx), %mm0 - psrlq %mm6, %mm5 C return value - - psrlq %mm6, %mm0 - popl %edi - - movd %mm5, %eax - popl %ebx - - movd %mm0, 4(%edx) - - emms - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(unroll): - C eax size - C ebx src - C ecx shift - C edx dst - C esi - C edi - C ebp -deflit(`FRAME',8) - - movd (%ebx), %mm5 C src[0] - movl $4, %edi - - movd %ecx, %mm6 C rshift - testl %edi, %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 ebx - C --+-------+-------+-------+ - C | xxx | - C --+-------+-------+-------+ - C 4mod8 0mod8 4mod8 - C - C dest edx - C --+-------+-------+ - C | | xxx | - C --+-------+-------+ - - movq (%ebx), %mm0 C unaligned load - - psrlq %mm6, %mm0 - addl $4, %ebx - - decl %eax - - movd %mm0, (%edx) - addl $4, %edx -L(start_src_aligned): - - - movq (%ebx), %mm1 - testl %edi, %edx - - psrlq %mm6, %mm5 C retval - 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 - C separately. - C - C source ebx - C --+-------+-------+ - C | mm1 | - C --+-------+-------+ - C 4mod8 0mod8 - C - C dest edx - C --+-------+-------+-------+ - C | xxx | - C --+-------+-------+-------+ - C 4mod8 0mod8 4mod8 - - movq %mm1, %mm0 - addl $32, %ecx C new shift - - psrlq %mm6, %mm0 - - movd %ecx, %mm6 - - movd %mm0, (%edx) - addl $4, %edx -L(start_dst_aligned): - - - movq 8(%ebx), %mm3 - negl %ecx - - movq %mm3, %mm2 C mm2 src qword - addl $64, %ecx - - movd %ecx, %mm7 - psrlq %mm6, %mm1 - - leal -12(%ebx,%eax,4), %ebx - leal -20(%edx,%eax,4), %edx - - psllq %mm7, %mm3 - subl $7, %eax C size-7 - - por %mm1, %mm3 C mm3 ready to store - negl %eax C -(size-7) - - jns L(finish) - - - C This loop is the important bit, the rest is just support. Careful - C instruction scheduling achieves the claimed 1.75 c/l. The - C relevant parts of the pairing rules are: - C - C - mmx loads and stores execute only in the U pipe - C - only one mmx shift in a pair - C - wait one cycle before storing an mmx register result - C - the usual address generation interlock - C - C Two qword calculations are slightly interleaved. The instructions - C marked "C" belong to the second qword, and the "C prev" one is for - C the second qword from the previous iteration. - - ALIGN(8) -L(unroll_loop): - C eax counter, limbs, negative - C ebx &src[size-12] - C ecx - C edx &dst[size-12] - C esi - C edi - C - C mm0 - C mm1 - C mm2 src qword from -8(%ebx,%eax,4) - C mm3 dst qword ready to store to -8(%edx,%eax,4) - C - C mm5 return value - C mm6 rshift - C mm7 lshift - - movq (%ebx,%eax,4), %mm0 - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - movq %mm3, -8(%edx,%eax,4) C prev - por %mm2, %mm0 - - movq 8(%ebx,%eax,4), %mm3 C - psrlq %mm6, %mm1 C - - movq %mm0, (%edx,%eax,4) - movq %mm3, %mm2 C - - psllq %mm7, %mm3 C - addl $4, %eax - - por %mm1, %mm3 C - js L(unroll_loop) - - -L(finish): - C eax 0 to 3 representing respectively 3 to 0 limbs remaining - - testb $2, %al - - jnz L(finish_no_two) - - movq (%ebx,%eax,4), %mm0 - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - movq %mm3, -8(%edx,%eax,4) C prev - por %mm2, %mm0 - - movq %mm1, %mm2 - movq %mm0, %mm3 - - addl $2, %eax -L(finish_no_two): - - - C eax 2 or 3 representing respectively 1 or 0 limbs remaining - C - C mm2 src prev qword, from -8(%ebx,%eax,4) - C mm3 dst qword, for -8(%edx,%eax,4) - - testb $1, %al - popl %edi - - movd %mm5, %eax C retval - jnz L(finish_zero) - - - C One extra limb, destination was aligned. - C - C source ebx - C +-------+---------------+-- - C | | mm2 | - C +-------+---------------+-- - C - C dest edx - C +-------+---------------+---------------+-- - C | | | mm3 | - C +-------+---------------+---------------+-- - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C One extra limb, destination was unaligned. - C - C source ebx - C +-------+---------------+-- - C | | mm2 | - C +-------+---------------+-- - C - C dest edx - C +---------------+---------------+-- - C | | mm3 | - 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 8(%edx), and in the aligned case - C there's a further extra limb of dst to be formed. - - - movd 8(%ebx), %mm0 - psrlq %mm6, %mm2 - - movq %mm0, %mm1 - psllq %mm7, %mm0 - - movq %mm3, (%edx) - por %mm2, %mm0 - - psrlq %mm6, %mm1 - andl $32, %ecx - - popl %ebx - jz L(finish_one_unaligned) - - C dst was aligned, must store one extra limb - movd %mm1, 16(%edx) -L(finish_one_unaligned): - - movq %mm0, 8(%edx) - - emms - - ret - - -L(finish_zero): - - C No extra limbs, destination was aligned. - C - C source ebx - C +---------------+-- - C | mm2 | - C +---------------+-- - C - C dest edx+4 - C +---------------+---------------+-- - C | | mm3 | - C +---------------+---------------+-- - C - C mm6 = shift - C mm7 = ecx = 64-shift - - - C No extra limbs, destination was unaligned. - C - C source ebx - C +---------------+-- - C | mm2 | - C +---------------+-- - C - C dest edx+4 - C +-------+---------------+-- - C | | mm3 | - C +-------+---------------+-- - C - C mm6 = shift+32 - C mm7 = 64-(shift+32) - - - C The movd for the unaligned case is clearly the same data as the - C movq for the aligned case, it's just a choice between whether one - C or two limbs should be written. - - - movq %mm3, 4(%edx) - psrlq %mm6, %mm2 - - movd %mm2, 12(%edx) - andl $32, %ecx - - popl %ebx - jz L(finish_zero_unaligned) - - movq %mm2, 12(%edx) -L(finish_zero_unaligned): - - emms - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/mul_1.asm b/rts/gmp/mpn/x86/pentium/mul_1.asm deleted file mode 100644 index 08639ec..0000000 --- a/rts/gmp/mpn/x86/pentium/mul_1.asm +++ /dev/null @@ -1,79 +0,0 @@ -dnl Intel Pentium mpn_mul_1 -- mpn by limb multiplication. -dnl -dnl P5: 13.0 cycles/limb - -dnl Copyright (C) 1992, 1994, 1996, 1999, 2000 Free Software Foundation, -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. */ - - -include(`../config.m4') - - -C mp_limb_t mpn_mul_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, -C mp_limb_t multiplier); - -defframe(PARAM_MULTIPLIER,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_mul_1) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST, %edi - movl PARAM_SRC, %esi - movl PARAM_SIZE, %ecx - movl PARAM_MULTIPLIER, %ebp - - leal (%edi,%ecx,4), %edi - leal (%esi,%ecx,4), %esi - negl %ecx - xorl %ebx, %ebx - ALIGN(8) - -L(oop): adcl $0, %ebx - movl (%esi,%ecx,4), %eax - - mull %ebp - - addl %eax, %ebx - - movl %ebx, (%edi,%ecx,4) - incl %ecx - - movl %edx, %ebx - jnz L(oop) - - adcl $0, %ebx - movl %ebx, %eax - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/mul_basecase.asm b/rts/gmp/mpn/x86/pentium/mul_basecase.asm deleted file mode 100644 index d9f79a0..0000000 --- a/rts/gmp/mpn/x86/pentium/mul_basecase.asm +++ /dev/null @@ -1,135 +0,0 @@ -dnl Intel Pentium mpn_mul_basecase -- mpn by mpn multiplication. -dnl -dnl P5: 14.2 cycles/crossproduct (approx) - - -dnl Copyright (C) 1996, 1998, 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C void mpn_mul_basecase (mp_ptr wp, -C mp_srcptr xp, mp_size_t xsize, -C mp_srcptr yp, mp_size_t ysize); - -defframe(PARAM_YSIZE, 20) -defframe(PARAM_YP, 16) -defframe(PARAM_XSIZE, 12) -defframe(PARAM_XP, 8) -defframe(PARAM_WP, 4) - -defframe(VAR_COUNTER, -4) - - .text - ALIGN(8) -PROLOGUE(mpn_mul_basecase) - - pushl %eax C dummy push for allocating stack slot - pushl %esi - pushl %ebp - pushl %edi -deflit(`FRAME',16) - - movl PARAM_XP,%esi - movl PARAM_WP,%edi - movl PARAM_YP,%ebp - - movl (%esi),%eax C load xp[0] - mull (%ebp) C multiply by yp[0] - movl %eax,(%edi) C store to wp[0] - movl PARAM_XSIZE,%ecx C xsize - decl %ecx C If xsize = 1, ysize = 1 too - jz L(done) - - movl PARAM_XSIZE,%eax - pushl %ebx -FRAME_pushl() - movl %edx,%ebx - leal (%esi,%eax,4),%esi C make xp point at end - leal (%edi,%eax,4),%edi C offset wp by xsize - negl %ecx C negate j size/index for inner loop - xorl %eax,%eax C clear carry - - ALIGN(8) -L(oop1): adcl $0,%ebx - movl (%esi,%ecx,4),%eax C load next limb at xp[j] - mull (%ebp) - addl %ebx,%eax - movl %eax,(%edi,%ecx,4) - incl %ecx - movl %edx,%ebx - jnz L(oop1) - - adcl $0,%ebx - movl PARAM_YSIZE,%eax - movl %ebx,(%edi) C most significant limb of product - addl $4,%edi C increment wp - decl %eax - jz L(skip) - movl %eax,VAR_COUNTER C set index i to ysize - -L(outer): - addl $4,%ebp C make ebp point to next y limb - movl PARAM_XSIZE,%ecx - negl %ecx - xorl %ebx,%ebx - - C code at 0x61 here, close enough to aligned -L(oop2): - adcl $0,%ebx - movl (%esi,%ecx,4),%eax - mull (%ebp) - addl %ebx,%eax - movl (%edi,%ecx,4),%ebx - adcl $0,%edx - addl %eax,%ebx - movl %ebx,(%edi,%ecx,4) - incl %ecx - movl %edx,%ebx - jnz L(oop2) - - adcl $0,%ebx - - movl %ebx,(%edi) - addl $4,%edi - movl VAR_COUNTER,%eax - decl %eax - movl %eax,VAR_COUNTER - jnz L(outer) - -L(skip): - popl %ebx - popl %edi - popl %ebp - popl %esi - addl $4,%esp - ret - -L(done): - movl %edx,4(%edi) C store to wp[1] - popl %edi - popl %ebp - popl %esi - popl %eax C dummy pop for deallocating stack slot - ret - -EPILOGUE() - diff --git a/rts/gmp/mpn/x86/pentium/rshift.asm b/rts/gmp/mpn/x86/pentium/rshift.asm deleted file mode 100644 index e8f5ae8..0000000 --- a/rts/gmp/mpn/x86/pentium/rshift.asm +++ /dev/null @@ -1,236 +0,0 @@ -dnl Intel Pentium mpn_rshift -- mpn right shift. -dnl -dnl cycles/limb -dnl P5,P54: 6.0 -dnl P55: 5.375 - - -dnl Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); -C -C The main shift-by-N loop should run at 5.375 c/l and that's what P55 does, -C but P5 and P54 run only at 6.0 c/l, which is 4 cycles lost somewhere. - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_rshift) - - pushl %edi - pushl %esi - pushl %ebx - pushl %ebp -deflit(`FRAME',16) - - movl PARAM_DST,%edi - movl PARAM_SRC,%esi - movl PARAM_SIZE,%ebp - movl PARAM_SHIFT,%ecx - -C We can use faster code for shift-by-1 under certain conditions. - cmp $1,%ecx - jne L(normal) - leal 4(%edi),%eax - cmpl %esi,%eax - jnc L(special) C jump if res_ptr + 1 >= s_ptr - leal (%edi,%ebp,4),%eax - cmpl %eax,%esi - jnc L(special) C jump if s_ptr >= res_ptr + size - -L(normal): - movl (%esi),%edx - addl $4,%esi - xorl %eax,%eax - shrdl( %cl, %edx, %eax) C compute carry limb - pushl %eax C push carry limb onto stack - - decl %ebp - pushl %ebp - shrl $3,%ebp - jz L(end) - - movl (%edi),%eax C fetch destination cache line - - ALIGN(4) -L(oop): movl 28(%edi),%eax C fetch destination cache line - movl %edx,%ebx - - movl (%esi),%eax - movl 4(%esi),%edx - shrdl( %cl, %eax, %ebx) - shrdl( %cl, %edx, %eax) - movl %ebx,(%edi) - movl %eax,4(%edi) - - movl 8(%esi),%ebx - movl 12(%esi),%eax - shrdl( %cl, %ebx, %edx) - shrdl( %cl, %eax, %ebx) - movl %edx,8(%edi) - movl %ebx,12(%edi) - - movl 16(%esi),%edx - movl 20(%esi),%ebx - shrdl( %cl, %edx, %eax) - shrdl( %cl, %ebx, %edx) - movl %eax,16(%edi) - movl %edx,20(%edi) - - movl 24(%esi),%eax - movl 28(%esi),%edx - shrdl( %cl, %eax, %ebx) - shrdl( %cl, %edx, %eax) - movl %ebx,24(%edi) - movl %eax,28(%edi) - - addl $32,%esi - addl $32,%edi - decl %ebp - jnz L(oop) - -L(end): popl %ebp - andl $7,%ebp - jz L(end2) -L(oop2): - movl (%esi),%eax - shrdl( %cl,%eax,%edx) C compute result limb - movl %edx,(%edi) - movl %eax,%edx - addl $4,%esi - addl $4,%edi - decl %ebp - jnz L(oop2) - -L(end2): - shrl %cl,%edx C compute most significant limb - movl %edx,(%edi) C store it - - popl %eax C pop carry limb - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - - -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(special): - leal -4(%edi,%ebp,4),%edi - leal -4(%esi,%ebp,4),%esi - - movl (%esi),%edx - subl $4,%esi - - decl %ebp - pushl %ebp - shrl $3,%ebp - - shrl %edx - incl %ebp - decl %ebp - jz L(Lend) - - movl (%edi),%eax C fetch destination cache line - - ALIGN(4) -L(Loop): - movl -28(%edi),%eax C fetch destination cache line - movl %edx,%ebx - - movl (%esi),%eax - movl -4(%esi),%edx - rcrl %eax - movl %ebx,(%edi) - rcrl %edx - movl %eax,-4(%edi) - - movl -8(%esi),%ebx - movl -12(%esi),%eax - rcrl %ebx - movl %edx,-8(%edi) - rcrl %eax - movl %ebx,-12(%edi) - - movl -16(%esi),%edx - movl -20(%esi),%ebx - rcrl %edx - movl %eax,-16(%edi) - rcrl %ebx - movl %edx,-20(%edi) - - movl -24(%esi),%eax - movl -28(%esi),%edx - rcrl %eax - movl %ebx,-24(%edi) - rcrl %edx - movl %eax,-28(%edi) - - leal -32(%esi),%esi C use leal not to clobber carry - leal -32(%edi),%edi - decl %ebp - jnz L(Loop) - -L(Lend): - popl %ebp - sbbl %eax,%eax C save carry in %eax - andl $7,%ebp - jz L(Lend2) - addl %eax,%eax C restore carry from eax -L(Loop2): - movl %edx,%ebx - movl (%esi),%edx - rcrl %edx - movl %ebx,(%edi) - - leal -4(%esi),%esi C use leal not to clobber carry - leal -4(%edi),%edi - decl %ebp - jnz L(Loop2) - - jmp L(L1) -L(Lend2): - addl %eax,%eax C restore carry from eax -L(L1): movl %edx,(%edi) C store last limb - - movl $0,%eax - rcrl %eax - - popl %ebp - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/pentium/sqr_basecase.asm b/rts/gmp/mpn/x86/pentium/sqr_basecase.asm deleted file mode 100644 index c8584df..0000000 --- a/rts/gmp/mpn/x86/pentium/sqr_basecase.asm +++ /dev/null @@ -1,520 +0,0 @@ -dnl Intel P5 mpn_sqr_basecase -- square an mpn number. -dnl -dnl P5: approx 8 cycles per crossproduct, or 15.5 cycles per triangular -dnl product at around 20x20 limbs. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C void mpn_sqr_basecase (mp_ptr dst, mp_srcptr src, mp_size_t size); -C -C Calculate src,size squared, storing the result in dst,2*size. -C -C The algorithm is basically the same as mpn/generic/sqr_basecase.c, but a -C lot of function call overheads are avoided, especially when the size is -C small. - -defframe(PARAM_SIZE,12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_sqr_basecase) -deflit(`FRAME',0) - - movl PARAM_SIZE, %edx - movl PARAM_SRC, %eax - - cmpl $2, %edx - movl PARAM_DST, %ecx - - je L(two_limbs) - - movl (%eax), %eax - ja L(three_or_more) - -C ----------------------------------------------------------------------------- -C one limb only - C eax src - C ebx - C ecx dst - C edx - - mull %eax - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - - ret - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(two_limbs): - C eax src - C ebx - C ecx dst - C edx size - - pushl %ebp - pushl %edi - - pushl %esi - pushl %ebx - - movl %eax, %ebx - movl (%eax), %eax - - mull %eax C src[0]^2 - - movl %eax, (%ecx) C dst[0] - movl %edx, %esi C dst[1] - - movl 4(%ebx), %eax - - mull %eax C src[1]^2 - - movl %eax, %edi C dst[2] - movl %edx, %ebp C dst[3] - - movl (%ebx), %eax - - mull 4(%ebx) C src[0]*src[1] - - addl %eax, %esi - popl %ebx - - adcl %edx, %edi - - adcl $0, %ebp - addl %esi, %eax - - adcl %edi, %edx - movl %eax, 4(%ecx) - - adcl $0, %ebp - popl %esi - - movl %edx, 8(%ecx) - movl %ebp, 12(%ecx) - - popl %edi - popl %ebp - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(three_or_more): - C eax src low limb - C ebx - C ecx dst - C edx size - - cmpl $4, %edx - pushl %ebx -deflit(`FRAME',4) - - movl PARAM_SRC, %ebx - jae L(four_or_more) - - -C ----------------------------------------------------------------------------- -C three limbs - C eax src low limb - C ebx src - C ecx dst - C edx size - - pushl %ebp - pushl %edi - - mull %eax C src[0] ^ 2 - - movl %eax, (%ecx) - movl %edx, 4(%ecx) - - movl 4(%ebx), %eax - xorl %ebp, %ebp - - mull %eax C src[1] ^ 2 - - movl %eax, 8(%ecx) - movl %edx, 12(%ecx) - - movl 8(%ebx), %eax - pushl %esi C risk of cache bank clash - - mull %eax C src[2] ^ 2 - - movl %eax, 16(%ecx) - movl %edx, 20(%ecx) - - movl (%ebx), %eax - - mull 4(%ebx) C src[0] * src[1] - - movl %eax, %esi - movl %edx, %edi - - movl (%ebx), %eax - - mull 8(%ebx) C src[0] * src[2] - - addl %eax, %edi - movl %edx, %ebp - - adcl $0, %ebp - movl 4(%ebx), %eax - - mull 8(%ebx) C src[1] * src[2] - - xorl %ebx, %ebx - addl %eax, %ebp - - C eax - C ebx zero, will be dst[5] - C ecx dst - C edx dst[4] - C esi dst[1] - C edi dst[2] - C ebp dst[3] - - adcl $0, %edx - addl %esi, %esi - - adcl %edi, %edi - - adcl %ebp, %ebp - - adcl %edx, %edx - movl 4(%ecx), %eax - - adcl $0, %ebx - addl %esi, %eax - - movl %eax, 4(%ecx) - movl 8(%ecx), %eax - - adcl %edi, %eax - movl 12(%ecx), %esi - - adcl %ebp, %esi - movl 16(%ecx), %edi - - movl %eax, 8(%ecx) - movl %esi, 12(%ecx) - - adcl %edx, %edi - popl %esi - - movl 20(%ecx), %eax - movl %edi, 16(%ecx) - - popl %edi - popl %ebp - - adcl %ebx, %eax C no carry out of this - popl %ebx - - movl %eax, 20(%ecx) - - ret - - -C ----------------------------------------------------------------------------- - ALIGN(8) -L(four_or_more): - C eax src low limb - C ebx src - C ecx dst - C edx size - C esi - C edi - C ebp - C - C First multiply src[0]*src[1..size-1] and store at dst[1..size]. - -deflit(`FRAME',4) - - pushl %edi -FRAME_pushl() - pushl %esi -FRAME_pushl() - - pushl %ebp -FRAME_pushl() - leal (%ecx,%edx,4), %edi C dst end of this mul1 - - leal (%ebx,%edx,4), %esi C src end - movl %ebx, %ebp C src - - negl %edx C -size - xorl %ebx, %ebx C clear carry limb and carry flag - - leal 1(%edx), %ecx C -(size-1) - -L(mul1): - C eax scratch - C ebx carry - C ecx counter, negative - C edx scratch - C esi &src[size] - C edi &dst[size] - C ebp src - - adcl $0, %ebx - movl (%esi,%ecx,4), %eax - - mull (%ebp) - - addl %eax, %ebx - - movl %ebx, (%edi,%ecx,4) - incl %ecx - - movl %edx, %ebx - jnz L(mul1) - - - C Add products src[n]*src[n+1..size-1] at dst[2*n-1...], for - C n=1..size-2. - C - C The last two products, which are the end corner of the product - C triangle, are handled separately to save looping overhead. These - C are src[size-3]*src[size-2,size-1] and src[size-2]*src[size-1]. - C If size is 4 then it's only these that need to be done. - C - C In the outer loop %esi is a constant, and %edi just advances by 1 - C limb each time. The size of the operation decreases by 1 limb - C each time. - - C eax - C ebx carry (needing carry flag added) - C ecx - C edx - C esi &src[size] - C edi &dst[size] - C ebp - - adcl $0, %ebx - movl PARAM_SIZE, %edx - - movl %ebx, (%edi) - subl $4, %edx - - negl %edx - jz L(corner) - - -L(outer): - C ebx previous carry limb to store - C edx outer loop counter (negative) - C esi &src[size] - C edi dst, pointing at stored carry limb of previous loop - - pushl %edx C new outer loop counter - leal -2(%edx), %ecx - - movl %ebx, (%edi) - addl $4, %edi - - addl $4, %ebp - xorl %ebx, %ebx C initial carry limb, clear carry flag - -L(inner): - C eax scratch - C ebx carry (needing carry flag added) - C ecx counter, negative - C edx scratch - C esi &src[size] - C edi dst end of this addmul - C ebp &src[j] - - adcl $0, %ebx - movl (%esi,%ecx,4), %eax - - mull (%ebp) - - addl %ebx, %eax - movl (%edi,%ecx,4), %ebx - - adcl $0, %edx - addl %eax, %ebx - - movl %ebx, (%edi,%ecx,4) - incl %ecx - - movl %edx, %ebx - jnz L(inner) - - - adcl $0, %ebx - popl %edx C outer loop counter - - incl %edx - jnz L(outer) - - - movl %ebx, (%edi) - -L(corner): - C esi &src[size] - C edi &dst[2*size-4] - - movl -8(%esi), %eax - movl -4(%edi), %ebx C risk of data cache bank clash here - - mull -12(%esi) C src[size-2]*src[size-3] - - addl %eax, %ebx - movl %edx, %ecx - - adcl $0, %ecx - movl -4(%esi), %eax - - mull -12(%esi) C src[size-1]*src[size-3] - - addl %ecx, %eax - movl (%edi), %ecx - - adcl $0, %edx - movl %ebx, -4(%edi) - - addl %eax, %ecx - movl %edx, %ebx - - adcl $0, %ebx - movl -4(%esi), %eax - - mull -8(%esi) C src[size-1]*src[size-2] - - movl %ecx, 0(%edi) - addl %eax, %ebx - - adcl $0, %edx - movl PARAM_SIZE, %eax - - negl %eax - movl %ebx, 4(%edi) - - addl $1, %eax C -(size-1) and clear carry - movl %edx, 8(%edi) - - -C ----------------------------------------------------------------------------- -C Left shift of dst[1..2*size-2], high bit shifted out becomes dst[2*size-1]. - -L(lshift): - C eax counter, negative - C ebx next limb - C ecx - C edx - C esi - C edi &dst[2*size-4] - C ebp - - movl 12(%edi,%eax,8), %ebx - - rcll %ebx - movl 16(%edi,%eax,8), %ecx - - rcll %ecx - movl %ebx, 12(%edi,%eax,8) - - movl %ecx, 16(%edi,%eax,8) - incl %eax - - jnz L(lshift) - - - adcl %eax, %eax C high bit out - movl PARAM_SRC, %esi - - movl PARAM_SIZE, %ecx C risk of cache bank clash - movl %eax, 12(%edi) C dst most significant limb - - -C ----------------------------------------------------------------------------- -C Now add in the squares on the diagonal, namely 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. - - movl (%esi), %eax C src[0] - leal (%esi,%ecx,4), %esi C src end - - negl %ecx - - mull %eax - - movl %eax, 16(%edi,%ecx,8) C dst[0] - movl %edx, %ebx - - addl $1, %ecx C size-1 and clear carry - -L(diag): - C eax scratch (low product) - C ebx carry limb - C ecx counter, negative - C edx scratch (high product) - C esi &src[size] - C edi &dst[2*size-4] - C ebp scratch (fetched dst limbs) - - movl (%esi,%ecx,4), %eax - adcl $0, %ebx - - mull %eax - - movl 16-4(%edi,%ecx,8), %ebp - - addl %ebp, %ebx - movl 16(%edi,%ecx,8), %ebp - - adcl %eax, %ebp - movl %ebx, 16-4(%edi,%ecx,8) - - movl %ebp, 16(%edi,%ecx,8) - incl %ecx - - movl %edx, %ebx - jnz L(diag) - - - adcl $0, %edx - movl 16-4(%edi), %eax C dst most significant limb - - addl %eax, %edx - popl %ebp - - movl %edx, 16-4(%edi) - popl %esi C risk of cache bank clash - - popl %edi - popl %ebx - - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/rshift.asm b/rts/gmp/mpn/x86/rshift.asm deleted file mode 100644 index c9881fd..0000000 --- a/rts/gmp/mpn/x86/rshift.asm +++ /dev/null @@ -1,92 +0,0 @@ -dnl x86 mpn_rshift -- mpn right shift. - -dnl Copyright (C) 1992, 1994, 1996, 1999, 2000 Free Software Foundation, -dnl 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_rshift (mp_ptr dst, mp_srcptr src, mp_size_t size, -C unsigned shift); - -defframe(PARAM_SHIFT,16) -defframe(PARAM_SIZE, 12) -defframe(PARAM_SRC, 8) -defframe(PARAM_DST, 4) - - .text - ALIGN(8) -PROLOGUE(mpn_rshift) - - pushl %edi - pushl %esi - pushl %ebx -deflit(`FRAME',12) - - movl PARAM_DST,%edi - movl PARAM_SRC,%esi - movl PARAM_SIZE,%edx - movl PARAM_SHIFT,%ecx - - leal -4(%edi,%edx,4),%edi - leal (%esi,%edx,4),%esi - negl %edx - - movl (%esi,%edx,4),%ebx C read least significant limb - xorl %eax,%eax - shrdl( %cl, %ebx, %eax) C compute carry limb - incl %edx - jz L(end) - pushl %eax C push carry limb onto stack - testb $1,%dl - jnz L(1) C enter loop in the middle - movl %ebx,%eax - - ALIGN(8) -L(oop): movl (%esi,%edx,4),%ebx C load next higher limb - shrdl( %cl, %ebx, %eax) C compute result limb - movl %eax,(%edi,%edx,4) C store it - incl %edx -L(1): movl (%esi,%edx,4),%eax - shrdl( %cl, %eax, %ebx) - movl %ebx,(%edi,%edx,4) - incl %edx - jnz L(oop) - - shrl %cl,%eax C compute most significant limb - movl %eax,(%edi) C store it - - popl %eax C pop carry limb - - popl %ebx - popl %esi - popl %edi - ret - -L(end): shrl %cl,%ebx C compute most significant limb - movl %ebx,(%edi) C store it - - popl %ebx - popl %esi - popl %edi - ret - -EPILOGUE() diff --git a/rts/gmp/mpn/x86/udiv.asm b/rts/gmp/mpn/x86/udiv.asm deleted file mode 100644 index 9fe022b..0000000 --- a/rts/gmp/mpn/x86/udiv.asm +++ /dev/null @@ -1,44 +0,0 @@ -dnl x86 mpn_udiv_qrnnd -- 2 by 1 limb division - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_udiv_qrnnd (mp_limb_t *remptr, mp_limb_t high, mp_limb_t low, -C mp_limb_t divisor); - -defframe(PARAM_DIVISOR, 16) -defframe(PARAM_LOW, 12) -defframe(PARAM_HIGH, 8) -defframe(PARAM_REMPTR, 4) - - TEXT - ALIGN(8) -PROLOGUE(mpn_udiv_qrnnd) -deflit(`FRAME',0) - movl PARAM_LOW, %eax - movl PARAM_HIGH, %edx - divl PARAM_DIVISOR - movl PARAM_REMPTR, %ecx - movl %edx, (%ecx) - ret -EPILOGUE() diff --git a/rts/gmp/mpn/x86/umul.asm b/rts/gmp/mpn/x86/umul.asm deleted file mode 100644 index 3d289d1..0000000 --- a/rts/gmp/mpn/x86/umul.asm +++ /dev/null @@ -1,43 +0,0 @@ -dnl mpn_umul_ppmm -- 1x1->2 limb multiplication - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -include(`../config.m4') - - -C mp_limb_t mpn_umul_ppmm (mp_limb_t *lowptr, mp_limb_t m1, mp_limb_t m2); -C - -defframe(PARAM_M2, 12) -defframe(PARAM_M1, 8) -defframe(PARAM_LOWPTR, 4) - - TEXT - ALIGN(8) -PROLOGUE(mpn_umul_ppmm) -deflit(`FRAME',0) - movl PARAM_LOWPTR, %ecx - movl PARAM_M1, %eax - mull PARAM_M2 - movl %eax, (%ecx) - movl %edx, %eax - ret -EPILOGUE() diff --git a/rts/gmp/mpn/x86/x86-defs.m4 b/rts/gmp/mpn/x86/x86-defs.m4 deleted file mode 100644 index 2dad698..0000000 --- a/rts/gmp/mpn/x86/x86-defs.m4 +++ /dev/null @@ -1,713 +0,0 @@ -divert(-1) - -dnl m4 macros for x86 assembler. - - -dnl Copyright (C) 1999, 2000 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 -dnl modify it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation; either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl The GNU MP Library is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with the GNU MP Library; see the file COPYING.LIB. If -dnl not, write to the Free Software Foundation, Inc., 59 Temple Place - -dnl Suite 330, Boston, MA 02111-1307, USA. - - -dnl Notes: -dnl -dnl m4 isn't perfect for processing BSD style x86 assembler code, the main -dnl problems are, -dnl -dnl 1. Doing define(foo,123) and then using foo in an addressing mode like -dnl foo(%ebx) expands as a macro rather than a constant. This is worked -dnl around by using deflit() from asm-defs.m4, instead of define(). -dnl -dnl 2. Immediates in macro definitions need a space or `' to stop the $ -dnl looking like a macro parameter. For example, -dnl -dnl define(foo, `mov $ 123, %eax') -dnl -dnl This is only a problem in macro definitions, not in ordinary text, -dnl nor in macro parameters like text passed to forloop() or ifdef(). - - -deflit(BYTES_PER_MP_LIMB, 4) - - -dnl -------------------------------------------------------------------------- -dnl Replacement PROLOGUE/EPILOGUE with more sophisticated error checking. -dnl Nesting and overlapping not allowed. -dnl - - -dnl Usage: PROLOGUE(functionname) -dnl -dnl Generate a function prologue. functionname gets GSYM_PREFIX added. -dnl Examples, -dnl -dnl PROLOGUE(mpn_add_n) -dnl PROLOGUE(somefun) - -define(`PROLOGUE', -m4_assert_numargs(1) -m4_assert_defined(`PROLOGUE_cpu') -`ifdef(`PROLOGUE_current_function', -`m4_error(`PROLOGUE'(`PROLOGUE_current_function') needs an `EPILOGUE'() before `PROLOGUE'($1) -)')dnl -m4_file_seen()dnl -define(`PROLOGUE_current_function',`$1')dnl -PROLOGUE_cpu(GSYM_PREFIX`'$1)') - - -dnl Usage: EPILOGUE() -dnl -dnl Notice the function name is passed to EPILOGUE_cpu(), letting it use $1 -dnl instead of the long PROLOGUE_current_function symbol. - -define(`EPILOGUE', -m4_assert_numargs(0) -m4_assert_defined(`EPILOGUE_cpu') -`ifdef(`PROLOGUE_current_function',, -`m4_error(`EPILOGUE'() with no `PROLOGUE'() -)')dnl -EPILOGUE_cpu(GSYM_PREFIX`'PROLOGUE_current_function)`'dnl -undefine(`PROLOGUE_current_function')') - -m4wrap_prepend( -`ifdef(`PROLOGUE_current_function', -`m4_error(`EPILOGUE() for PROLOGUE('PROLOGUE_current_function`) never seen -')')') - - -dnl Usage: PROLOGUE_assert_inside() -dnl -dnl Use this unquoted on a line on its own at the start of a macro -dnl definition to add some code to check the macro is only used inside a -dnl PROLOGUE/EPILOGUE pair, and that hence PROLOGUE_current_function is -dnl defined. - -define(PROLOGUE_assert_inside, -m4_assert_numargs(0) -``PROLOGUE_assert_inside_internal'(m4_doublequote($`'0))`dnl '') - -define(PROLOGUE_assert_inside_internal, -m4_assert_numargs(1) -`ifdef(`PROLOGUE_current_function',, -`m4_error(`$1 used outside a PROLOGUE / EPILOGUE pair -')')') - - -dnl Usage: L(labelname) -dnl LF(functionname,labelname) -dnl -dnl Generate a local label in the current or given function. For LF(), -dnl functionname gets GSYM_PREFIX added, the same as with PROLOGUE(). -dnl -dnl For example, in a function mpn_add_n (and with MPN_PREFIX __gmpn), -dnl -dnl L(bar) => L__gmpn_add_n__bar -dnl LF(somefun,bar) => Lsomefun__bar -dnl -dnl The funtion name and label name get two underscores between them rather -dnl than one to guard against clashing with a separate external symbol that -dnl happened to be called functionname_labelname. (Though this would only -dnl happen if the local label prefix is is empty.) Underscores are used so -dnl the whole label will still be a valid C identifier and so can be easily -dnl used in gdb. - -dnl LSYM_PREFIX can be L$, so defn() is used to prevent L expanding as the -dnl L macro and making an infinite recursion. -define(LF, -m4_assert_numargs(2) -m4_assert_defined(`LSYM_PREFIX') -`defn(`LSYM_PREFIX')GSYM_PREFIX`'$1`'__$2') - -define(`L', -m4_assert_numargs(1) -PROLOGUE_assert_inside() -`LF(PROLOGUE_current_function,`$1')') - - -dnl Called: PROLOGUE_cpu(gsym) -dnl EPILOGUE_cpu(gsym) - -define(PROLOGUE_cpu, -m4_assert_numargs(1) - `GLOBL $1 - TYPE($1,`function') -$1:') - -define(EPILOGUE_cpu, -m4_assert_numargs(1) -` SIZE($1,.-$1)') - - - -dnl -------------------------------------------------------------------------- -dnl Various x86 macros. -dnl - - -dnl Usage: ALIGN_OFFSET(bytes,offset) -dnl -dnl Align to `offset' away from a multiple of `bytes'. -dnl -dnl This is useful for testing, for example align to something very strict -dnl and see what effect offsets from it have, "ALIGN_OFFSET(256,32)". -dnl -dnl Generally you wouldn't execute across the padding, but it's done with -dnl nop's so it'll work. - -define(ALIGN_OFFSET, -m4_assert_numargs(2) -`ALIGN($1) -forloop(`i',1,$2,` nop -')') - - -dnl Usage: defframe(name,offset) -dnl -dnl Make a definition like the following with which to access a parameter -dnl or variable on the stack. -dnl -dnl define(name,`FRAME+offset(%esp)') -dnl -dnl Actually m4_empty_if_zero(FRAME+offset) is used, which will save one -dnl byte if FRAME+offset is zero, by putting (%esp) rather than 0(%esp). -dnl Use define(`defframe_empty_if_zero_disabled',1) if for some reason the -dnl zero offset is wanted. -dnl -dnl The new macro also gets a check that when it's used FRAME is actually -dnl defined, and that the final %esp offset isn't negative, which would -dnl mean an attempt to access something below the current %esp. -dnl -dnl deflit() is used rather than a plain define(), so the new macro won't -dnl delete any following parenthesized expression. name(%edi) will come -dnl out say as 16(%esp)(%edi). This isn't valid assembler and should -dnl provoke an error, which is better than silently giving just 16(%esp). -dnl -dnl See README.family for more on the suggested way to access the stack -dnl frame. - -define(defframe, -m4_assert_numargs(2) -`deflit(`$1', -m4_assert_defined(`FRAME') -`defframe_check_notbelow(`$1',$2,FRAME)dnl -defframe_empty_if_zero(FRAME+($2))(%esp)')') - -dnl Called: defframe_empty_if_zero(expression) -define(defframe_empty_if_zero, -`ifelse(defframe_empty_if_zero_disabled,1, -`eval($1)', -`m4_empty_if_zero($1)')') - -dnl Called: defframe_check_notbelow(`name',offset,FRAME) -define(defframe_check_notbelow, -m4_assert_numargs(3) -`ifelse(eval(($3)+($2)<0),1, -`m4_error(`$1 at frame offset $2 used when FRAME is only $3 bytes -')')') - - -dnl Usage: FRAME_pushl() -dnl FRAME_popl() -dnl FRAME_addl_esp(n) -dnl FRAME_subl_esp(n) -dnl -dnl Adjust FRAME appropriately for a pushl or popl, or for an addl or subl -dnl %esp of n bytes. -dnl -dnl Using these macros is completely optional. Sometimes it makes more -dnl sense to put explicit deflit(`FRAME',N) forms, especially when there's -dnl jumps and different sequences of FRAME values need to be used in -dnl different places. - -define(FRAME_pushl, -m4_assert_numargs(0) -m4_assert_defined(`FRAME') -`deflit(`FRAME',eval(FRAME+4))') - -define(FRAME_popl, -m4_assert_numargs(0) -m4_assert_defined(`FRAME') -`deflit(`FRAME',eval(FRAME-4))') - -define(FRAME_addl_esp, -m4_assert_numargs(1) -m4_assert_defined(`FRAME') -`deflit(`FRAME',eval(FRAME-($1)))') - -define(FRAME_subl_esp, -m4_assert_numargs(1) -m4_assert_defined(`FRAME') -`deflit(`FRAME',eval(FRAME+($1)))') - - -dnl Usage: defframe_pushl(name) -dnl -dnl Do a combination of a FRAME_pushl() and a defframe() to name the stack -dnl location just pushed. This should come after a pushl instruction. -dnl Putting it on the same line works and avoids lengthening the code. For -dnl example, -dnl -dnl pushl %eax defframe_pushl(VAR_COUNTER) -dnl -dnl Notice the defframe() is done with an unquoted -FRAME thus giving its -dnl current value without tracking future changes. - -define(defframe_pushl, -`FRAME_pushl()defframe(`$1',-FRAME)') - - -dnl -------------------------------------------------------------------------- -dnl Assembler instruction macros. -dnl - - -dnl Usage: emms_or_femms -dnl femms_available_p -dnl -dnl femms_available_p expands to 1 or 0 according to whether the AMD 3DNow -dnl femms instruction is available. emms_or_femms expands to femms if -dnl available, or emms if not. -dnl -dnl emms_or_femms is meant for use in the K6 directory where plain K6 -dnl (without femms) and K6-2 and K6-3 (with a slightly faster femms) are -dnl supported together. -dnl -dnl On K7 femms is no longer faster and is just an alias for emms, so plain -dnl emms may as well be used. - -define(femms_available_p, -m4_assert_numargs(-1) -`m4_ifdef_anyof_p( - `HAVE_TARGET_CPU_k62', - `HAVE_TARGET_CPU_k63', - `HAVE_TARGET_CPU_athlon')') - -define(emms_or_femms, -m4_assert_numargs(-1) -`ifelse(femms_available_p,1,`femms',`emms')') - - -dnl Usage: femms -dnl -dnl The gas 2.9.1 that comes with FreeBSD 3.4 doesn't support femms, so the -dnl following is a replacement using .byte. -dnl -dnl If femms isn't available, an emms is generated instead, for convenience -dnl when testing on a machine without femms. - -define(femms, -m4_assert_numargs(-1) -`ifelse(femms_available_p,1, -`.byte 15,14 C AMD 3DNow femms', -`emms`'dnl -m4_warning(`warning, using emms in place of femms, use for testing only -')')') - - -dnl Usage: jadcl0(op) -dnl -dnl Issue a jnc/incl as a substitute for adcl $0,op. This isn't an exact -dnl replacement, since it doesn't set the flags like adcl does. -dnl -dnl This finds a use in K6 mpn_addmul_1, mpn_submul_1, mpn_mul_basecase and -dnl mpn_sqr_basecase because on K6 an adcl is slow, the branch -dnl misprediction penalty is small, and the multiply algorithm used leads -dnl to a carry bit on average only 1/4 of the time. -dnl -dnl jadcl0_disabled can be set to 1 to instead issue an ordinary adcl for -dnl comparison. For example, -dnl -dnl define(`jadcl0_disabled',1) -dnl -dnl When using a register operand, eg. "jadcl0(%edx)", the jnc/incl code is -dnl the same size as an adcl. This makes it possible to use the exact same -dnl computed jump code when testing the relative speed of jnc/incl and adcl -dnl with jadcl0_disabled. - -define(jadcl0, -m4_assert_numargs(1) -`ifelse(jadcl0_disabled,1, - `adcl $`'0, $1', - `jnc 1f - incl $1 -1:dnl')') - - -dnl Usage: cmov_available_p -dnl -dnl Expand to 1 if cmov is available, 0 if not. - -define(cmov_available_p, -`m4_ifdef_anyof_p( - `HAVE_TARGET_CPU_pentiumpro', - `HAVE_TARGET_CPU_pentium2', - `HAVE_TARGET_CPU_pentium3', - `HAVE_TARGET_CPU_athlon')') - - -dnl Usage: x86_lookup(target, key,value, key,value, ...) -dnl x86_lookup_p(target, key,value, key,value, ...) -dnl -dnl Look for `target' among the `key' parameters. -dnl -dnl x86_lookup expands to the corresponding `value', or generates an error -dnl if `target' isn't found. -dnl -dnl x86_lookup_p expands to 1 if `target' is found, or 0 if not. - -define(x86_lookup, -`ifelse(eval($#<3),1, -`m4_error(`unrecognised part of x86 instruction: $1 -')', -`ifelse(`$1',`$2', `$3', -`x86_lookup(`$1',shift(shift(shift($@))))')')') - -define(x86_lookup_p, -`ifelse(eval($#<3),1, `0', -`ifelse(`$1',`$2', `1', -`x86_lookup_p(`$1',shift(shift(shift($@))))')')') - - -dnl Usage: x86_opcode_reg32(reg) -dnl x86_opcode_reg32_p(reg) -dnl -dnl x86_opcode_reg32 expands to the standard 3 bit encoding for the given -dnl 32-bit register, eg. `%ebp' turns into 5. -dnl -dnl x86_opcode_reg32_p expands to 1 if reg is a valid 32-bit register, or 0 -dnl if not. - -define(x86_opcode_reg32, -m4_assert_numargs(1) -`x86_lookup(`$1',x86_opcode_reg32_list)') - -define(x86_opcode_reg32_p, -m4_assert_onearg() -`x86_lookup_p(`$1',x86_opcode_reg32_list)') - -define(x86_opcode_reg32_list, -``%eax',0, -`%ecx',1, -`%edx',2, -`%ebx',3, -`%esp',4, -`%ebp',5, -`%esi',6, -`%edi',7') - - -dnl Usage: x86_opcode_tttn(cond) -dnl -dnl Expand to the 4-bit "tttn" field value for the given x86 branch -dnl condition (like `c', `ae', etc). - -define(x86_opcode_tttn, -m4_assert_numargs(1) -`x86_lookup(`$1',x86_opcode_ttn_list)') - -define(x86_opcode_tttn_list, -``o', 0, -`no', 1, -`b', 2, `c', 2, `nae',2, -`nb', 3, `nc', 3, `ae', 3, -`e', 4, `z', 4, -`ne', 5, `nz', 5, -`be', 6, `na', 6, -`nbe', 7, `a', 7, -`s', 8, -`ns', 9, -`p', 10, `pe', 10, `npo',10, -`np', 11, `npe',11, `po', 11, -`l', 12, `nge',12, -`nl', 13, `ge', 13, -`le', 14, `ng', 14, -`nle',15, `g', 15') - - -dnl Usage: cmovCC(srcreg,dstreg) -dnl -dnl Generate a cmov instruction if the target supports cmov, or simulate it -dnl with a conditional jump if not (the latter being meant only for -dnl testing). For example, -dnl -dnl cmovz( %eax, %ebx) -dnl -dnl cmov instructions are generated using .byte sequences, since only -dnl recent versions of gas know cmov. -dnl -dnl The source operand can only be a plain register. (m4 code implementing -dnl full memory addressing modes exists, believe it or not, but isn't -dnl currently needed and isn't included.) -dnl -dnl All the standard conditions are defined. Attempting to use one without -dnl the macro parentheses, such as just "cmovbe %eax, %ebx", will provoke -dnl an error. This ensures the necessary .byte sequences aren't -dnl accidentally missed. - -dnl Called: define_cmov_many(cond,tttn,cond,tttn,...) -define(define_cmov_many, -`ifelse(m4_length(`$1'),0,, -`define_cmov(`$1',`$2')define_cmov_many(shift(shift($@)))')') - -dnl Called: define_cmov(cond,tttn) -define(define_cmov, -m4_assert_numargs(2) -`define(`cmov$1', -m4_instruction_wrapper() -m4_assert_numargs(2) -`cmov_internal'(m4_doublequote($`'0),``$1',`$2'',dnl -m4_doublequote($`'1),m4_doublequote($`'2)))') - -define_cmov_many(x86_opcode_tttn_list) - - -dnl Called: cmov_internal(name,cond,tttn,src,dst) -define(cmov_internal, -m4_assert_numargs(5) -`ifelse(cmov_available_p,1, -`cmov_bytes_tttn(`$1',`$3',`$4',`$5')', -`m4_warning(`warning, simulating cmov with jump, use for testing only -')cmov_simulate(`$2',`$4',`$5')')') - -dnl Called: cmov_simulate(cond,src,dst) -dnl If this is going to be used with memory operands for the source it will -dnl need to be changed to do a fetch even if the condition is false, so as -dnl to trigger exceptions the same way a real cmov does. -define(cmov_simulate, -m4_assert_numargs(3) - `j$1 1f C cmov$1 $2, $3 - jmp 2f -1: movl $2, $3 -2:') - -dnl Called: cmov_bytes_tttn(name,tttn,src,dst) -define(cmov_bytes_tttn, -m4_assert_numargs(4) -`.byte dnl -15, dnl -eval(64+$2), dnl -eval(192+8*x86_opcode_reg32(`$4')+x86_opcode_reg32(`$3')) dnl - C `$1 $3, $4'') - - -dnl Usage: loop_or_decljnz label -dnl -dnl Generate either a "loop" instruction or a "decl %ecx / jnz", whichever -dnl is better. "loop" is better on K6 and probably on 386, on other chips -dnl separate decl/jnz is better. -dnl -dnl This macro is just for mpn/x86/divrem_1.asm and mpn/x86/mod_1.asm where -dnl this loop_or_decljnz variation is enough to let the code be shared by -dnl all chips. - -define(loop_or_decljnz, -`ifelse(loop_is_better_p,1, - `loop', - `decl %ecx - jnz')') - -define(loop_is_better_p, -`m4_ifdef_anyof_p(`HAVE_TARGET_CPU_k6', - `HAVE_TARGET_CPU_k62', - `HAVE_TARGET_CPU_k63', - `HAVE_TARGET_CPU_i386')') - - -dnl Usage: Zdisp(inst,op,op,op) -dnl -dnl Generate explicit .byte sequences if necessary to force a byte-sized -dnl zero displacement on an instruction. For example, -dnl -dnl Zdisp( movl, 0,(%esi), %eax) -dnl -dnl expands to -dnl -dnl .byte 139,70,0 C movl 0(%esi), %eax -dnl -dnl If the displacement given isn't 0, then normal assembler code is -dnl generated. For example, -dnl -dnl Zdisp( movl, 4,(%esi), %eax) -dnl -dnl expands to -dnl -dnl movl 4(%esi), %eax -dnl -dnl This means a single Zdisp() form can be used with an expression for the -dnl displacement, and .byte will be used only if necessary. The -dnl displacement argument is eval()ed. -dnl -dnl Because there aren't many places a 0(reg) form is wanted, Zdisp is -dnl implemented with a table of instructions and encodings. A new entry is -dnl needed for any different operation or registers. - -define(Zdisp, -`define(`Zdisp_found',0)dnl -Zdisp_match( movl, %eax, 0,(%edi), `137,71,0', $@)`'dnl -Zdisp_match( movl, %ebx, 0,(%edi), `137,95,0', $@)`'dnl -Zdisp_match( movl, %esi, 0,(%edi), `137,119,0', $@)`'dnl -Zdisp_match( movl, 0,(%ebx), %eax, `139,67,0', $@)`'dnl -Zdisp_match( movl, 0,(%ebx), %esi, `139,115,0', $@)`'dnl -Zdisp_match( movl, 0,(%esi), %eax, `139,70,0', $@)`'dnl -Zdisp_match( movl, 0,(%esi,%ecx,4), %eax, `0x8b,0x44,0x8e,0x00', $@)`'dnl -Zdisp_match( addl, %ebx, 0,(%edi), `1,95,0', $@)`'dnl -Zdisp_match( addl, %ecx, 0,(%edi), `1,79,0', $@)`'dnl -Zdisp_match( addl, %esi, 0,(%edi), `1,119,0', $@)`'dnl -Zdisp_match( subl, %ecx, 0,(%edi), `41,79,0', $@)`'dnl -Zdisp_match( adcl, 0,(%edx), %esi, `19,114,0', $@)`'dnl -Zdisp_match( sbbl, 0,(%edx), %esi, `27,114,0', $@)`'dnl -Zdisp_match( movq, 0,(%eax,%ecx,8), %mm0, `0x0f,0x6f,0x44,0xc8,0x00', $@)`'dnl -Zdisp_match( movq, 0,(%ebx,%eax,4), %mm0, `0x0f,0x6f,0x44,0x83,0x00', $@)`'dnl -Zdisp_match( movq, 0,(%ebx,%eax,4), %mm2, `0x0f,0x6f,0x54,0x83,0x00', $@)`'dnl -Zdisp_match( movq, 0,(%esi), %mm0, `15,111,70,0', $@)`'dnl -Zdisp_match( movq, %mm0, 0,(%edi), `15,127,71,0', $@)`'dnl -Zdisp_match( movq, %mm2, 0,(%ecx,%eax,4), `0x0f,0x7f,0x54,0x81,0x00', $@)`'dnl -Zdisp_match( movq, %mm2, 0,(%edx,%eax,4), `0x0f,0x7f,0x54,0x82,0x00', $@)`'dnl -Zdisp_match( movq, %mm0, 0,(%edx,%ecx,8), `0x0f,0x7f,0x44,0xca,0x00', $@)`'dnl -Zdisp_match( movd, 0,(%eax,%ecx,8), %mm1, `0x0f,0x6e,0x4c,0xc8,0x00', $@)`'dnl -Zdisp_match( movd, 0,(%edx,%ecx,8), %mm0, `0x0f,0x6e,0x44,0xca,0x00', $@)`'dnl -Zdisp_match( movd, %mm0, 0,(%eax,%ecx,4), `0x0f,0x7e,0x44,0x88,0x00', $@)`'dnl -Zdisp_match( movd, %mm0, 0,(%ecx,%eax,4), `0x0f,0x7e,0x44,0x81,0x00', $@)`'dnl -Zdisp_match( movd, %mm2, 0,(%ecx,%eax,4), `0x0f,0x7e,0x54,0x81,0x00', $@)`'dnl -ifelse(Zdisp_found,0, -`m4_error(`unrecognised instruction in Zdisp: $1 $2 $3 $4 -')')') - -define(Zdisp_match, -`ifelse(eval(m4_stringequal_p(`$1',`$6') - && m4_stringequal_p(`$2',0) - && m4_stringequal_p(`$3',`$8') - && m4_stringequal_p(`$4',`$9')),1, -`define(`Zdisp_found',1)dnl -ifelse(eval(`$7'),0, -` .byte $5 C `$1 0$3, $4'', -` $6 $7$8, $9')', - -`ifelse(eval(m4_stringequal_p(`$1',`$6') - && m4_stringequal_p(`$2',`$7') - && m4_stringequal_p(`$3',0) - && m4_stringequal_p(`$4',`$9')),1, -`define(`Zdisp_found',1)dnl -ifelse(eval(`$8'),0, -` .byte $5 C `$1 $2, 0$4'', -` $6 $7, $8$9')')')') - - -dnl Usage: shldl(count,src,dst) -dnl shrdl(count,src,dst) -dnl shldw(count,src,dst) -dnl shrdw(count,src,dst) -dnl -dnl Generate a double-shift instruction, possibly omitting a %cl count -dnl parameter if that's what the assembler requires, as indicated by -dnl WANT_SHLDL_CL in config.m4. For example, -dnl -dnl shldl( %cl, %eax, %ebx) -dnl -dnl turns into either -dnl -dnl shldl %cl, %eax, %ebx -dnl or -dnl shldl %eax, %ebx -dnl -dnl Immediate counts are always passed through unchanged. For example, -dnl -dnl shrdl( $2, %esi, %edi) -dnl becomes -dnl shrdl $2, %esi, %edi -dnl -dnl -dnl If you forget to use the macro form "shldl( ...)" and instead write -dnl just a plain "shldl ...", an error results. This ensures the necessary -dnl variant treatment of %cl isn't accidentally bypassed. - -define(define_shd_instruction, -`define($1, -m4_instruction_wrapper() -m4_assert_numargs(3) -`shd_instruction'(m4_doublequote($`'0),m4_doublequote($`'1),dnl -m4_doublequote($`'2),m4_doublequote($`'3)))') - -dnl Effectively: define(shldl,`shd_instruction(`$0',`$1',`$2',`$3')') etc -define_shd_instruction(shldl) -define_shd_instruction(shrdl) -define_shd_instruction(shldw) -define_shd_instruction(shrdw) - -dnl Called: shd_instruction(op,count,src,dst) -define(shd_instruction, -m4_assert_numargs(4) -m4_assert_defined(`WANT_SHLDL_CL') -`ifelse(eval(m4_stringequal_p(`$2',`%cl') && !WANT_SHLDL_CL),1, -``$1' `$3', `$4'', -``$1' `$2', `$3', `$4'')') - - -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(ne, `cmpl %eax, %ebx') -dnl -dnl The instructions can be omitted to just assert a flags condition with -dnl no extra calculation. For example, -dnl -dnl ASSERT(nc) -dnl -dnl When `instructions' is not empty, a pushf/popf is added to preserve the -dnl flags, but the instructions themselves must preserve any registers that -dnl matter. FRAME is adjusted for the push and pop, so the instructions -dnl given can use defframe() stack variables. - -define(ASSERT, -m4_assert_numargs_range(1,2) -`ifelse(WANT_ASSERT,1, - `C ASSERT -ifelse(`$2',,,` pushf ifdef(`FRAME',`FRAME_pushl()')') - $2 - j`$1' 1f - ud2 C assertion failed -1: -ifelse(`$2',,,` popf ifdef(`FRAME',`FRAME_popl()')') -')') - - -dnl Usage: movl_text_address(label,register) -dnl -dnl Get the address of a text segment label, using either a plain movl or a -dnl position-independent calculation, as necessary. For example, -dnl -dnl movl_code_address(L(foo),%eax) -dnl -dnl This macro is only meant for use in ASSERT()s or when testing, since -dnl the PIC sequence it generates will want to be done with a ret balancing -dnl the call on CPUs with return address branch predition. -dnl -dnl The addl generated here has a backward reference to 1b, and so won't -dnl suffer from the two forwards references bug in old gas (described in -dnl mpn/x86/README.family). - -define(movl_text_address, -`ifdef(`PIC', - `call 1f -1: popl $2 C %eip - addl `$'$1-1b, $2', - `movl `$'$1, $2')') - - -divert`'dnl diff --git a/rts/gmp/mpn/z8000/add_n.s b/rts/gmp/mpn/z8000/add_n.s deleted file mode 100644 index 3a13610..0000000 --- a/rts/gmp/mpn/z8000/add_n.s +++ /dev/null @@ -1,53 +0,0 @@ -! Z8000 __gmpn_add_n -- Add two limb vectors of equal, non-zero length. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r7 -! s1_ptr r6 -! s2_ptr r5 -! size r4 - -! If we are really crazy, we can use push to write a few result words -! backwards, using push just because it is faster than reg+disp. We'd -! then add 2x the number of words written to r7... - - unseg - .text - even - global ___gmpn_add_n -___gmpn_add_n: - pop r0,@r6 - pop r1,@r5 - add r0,r1 - ld @r7,r0 - dec r4 - jr eq,Lend -Loop: pop r0,@r6 - pop r1,@r5 - adc r0,r1 - inc r7,#2 - ld @r7,r0 - dec r4 - jr ne,Loop -Lend: ld r2,r4 ! use 0 already in r4 - adc r2,r2 - ret t diff --git a/rts/gmp/mpn/z8000/gmp-mparam.h b/rts/gmp/mpn/z8000/gmp-mparam.h deleted file mode 100644 index 4216df6..0000000 --- a/rts/gmp/mpn/z8000/gmp-mparam.h +++ /dev/null @@ -1,27 +0,0 @@ -/* gmp-mparam.h -- Compiler/machine parameter header file. - -Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#define BITS_PER_MP_LIMB 16 -#define BYTES_PER_MP_LIMB 2 -#define BITS_PER_LONGINT 32 -#define BITS_PER_INT 16 -#define BITS_PER_SHORTINT 16 -#define BITS_PER_CHAR 8 diff --git a/rts/gmp/mpn/z8000/mul_1.s b/rts/gmp/mpn/z8000/mul_1.s deleted file mode 100644 index 20fadd3..0000000 --- a/rts/gmp/mpn/z8000/mul_1.s +++ /dev/null @@ -1,68 +0,0 @@ -! Z8000 __gmpn_mul_1 -- Multiply a limb vector with a limb and store -! the result in a second limb vector. - -! Copyright (C) 1993, 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r7 -! s1_ptr r6 -! size r5 -! s2_limb r4 - - unseg - .text - even - global ___gmpn_mul_1 -___gmpn_mul_1: - sub r2,r2 ! zero carry limb - and r4,r4 - jr mi,Lneg - -Lpos: pop r1,@r6 - ld r9,r1 - mult rr8,r4 - and r1,r1 ! shift msb of loaded limb into cy - jr mi,Lp ! branch if loaded limb's msb is set - add r8,r4 ! hi_limb += sign_comp2 -Lp: add r9,r2 ! lo_limb += cy_limb - xor r2,r2 - adc r2,r8 - ld @r7,r9 - inc r7,#2 - dec r5 - jr ne,Lpos - ret t - -Lneg: pop r1,@r6 - ld r9,r1 - mult rr8,r4 - add r8,r1 ! hi_limb += sign_comp1 - and r1,r1 - jr mi,Ln - add r8,r4 ! hi_limb += sign_comp2 -Ln: add r9,r2 ! lo_limb += cy_limb - xor r2,r2 - adc r2,r8 - ld @r7,r9 - inc r7,#2 - dec r5 - jr ne,Lneg - ret t diff --git a/rts/gmp/mpn/z8000/sub_n.s b/rts/gmp/mpn/z8000/sub_n.s deleted file mode 100644 index bd9a7ad..0000000 --- a/rts/gmp/mpn/z8000/sub_n.s +++ /dev/null @@ -1,54 +0,0 @@ -! Z8000 __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and -! store difference in a third limb vector. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r7 -! s1_ptr r6 -! s2_ptr r5 -! size r4 - -! If we are really crazy, we can use push to write a few result words -! backwards, using push just because it is faster than reg+disp. We'd -! then add 2x the number of words written to r7... - - unseg - .text - even - global ___gmpn_sub_n -___gmpn_sub_n: - pop r0,@r6 - pop r1,@r5 - sub r0,r1 - ld @r7,r0 - dec r4 - jr eq,Lend -Loop: pop r0,@r6 - pop r1,@r5 - sbc r0,r1 - inc r7,#2 - ld @r7,r0 - dec r4 - jr ne,Loop -Lend: ld r2,r4 ! use 0 already in r4 - adc r2,r2 - ret t diff --git a/rts/gmp/mpn/z8000x/add_n.s b/rts/gmp/mpn/z8000x/add_n.s deleted file mode 100644 index 7f13078..0000000 --- a/rts/gmp/mpn/z8000x/add_n.s +++ /dev/null @@ -1,56 +0,0 @@ -! Z8000 (32 bit limb version) __gmpn_add_n -- Add two limb vectors of equal, -! non-zero length. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r7 -! s1_ptr r6 -! s2_ptr r5 -! size r4 - -! If we are really crazy, we can use push to write a few result words -! backwards, using push just because it is faster than reg+disp. We'd -! then add 2x the number of words written to r7... - - segm - .text - even - global ___gmpn_add_n -___gmpn_add_n: - popl rr0,@r6 - popl rr8,@r5 - addl rr0,rr8 - ldl @r7,rr0 - dec r4 - jr eq,Lend -Loop: popl rr0,@r6 - popl rr8,@r5 - adc r1,r9 - adc r0,r8 - inc r7,#4 - ldl @r7,rr0 - dec r4 - jr ne,Loop -Lend: ld r2,r4 ! use 0 already in r4 - ld r3,r4 - adc r2,r2 - ret t diff --git a/rts/gmp/mpn/z8000x/sub_n.s b/rts/gmp/mpn/z8000x/sub_n.s deleted file mode 100644 index f416d1d..0000000 --- a/rts/gmp/mpn/z8000x/sub_n.s +++ /dev/null @@ -1,56 +0,0 @@ -! Z8000 (32 bit limb version) __gmpn_sub_n -- Subtract two limb vectors of the -! same length > 0 and store difference in a third limb vector. - -! Copyright (C) 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 the GNU Lesser General Public License as published by -! the Free Software Foundation; either version 2.1 of the License, or (at your -! option) any later version. - -! The GNU MP Library is distributed in the hope that it will be useful, but -! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -! License for more details. - -! You should have received a copy of the GNU Lesser General Public License -! along with the GNU MP Library; see the file COPYING.LIB. If not, write to -! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -! MA 02111-1307, USA. - - -! INPUT PARAMETERS -! res_ptr r7 -! s1_ptr r6 -! s2_ptr r5 -! size r4 - -! If we are really crazy, we can use push to write a few result words -! backwards, using push just because it is faster than reg+disp. We'd -! then add 2x the number of words written to r7... - - segm - .text - even - global ___gmpn_sub_n -___gmpn_sub_n: - popl rr0,@r6 - popl rr8,@r5 - subl rr0,rr8 - ldl @r7,rr0 - dec r4 - jr eq,Lend -Loop: popl rr0,@r6 - popl rr8,@r5 - sbc r1,r9 - sbc r0,r8 - inc r7,#4 - ldl @r7,rr0 - dec r4 - jr ne,Loop -Lend: ld r2,r4 ! use 0 already in r4 - ld r3,r4 - adc r2,r2 - ret t diff --git a/rts/gmp/mpz/Makefile.am b/rts/gmp/mpz/Makefile.am deleted file mode 100644 index cd6fec4..0000000 --- a/rts/gmp/mpz/Makefile.am +++ /dev/null @@ -1,58 +0,0 @@ -## Process this file with automake to generate Makefile.in - -# Copyright (C) 1996, 1998, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -AUTOMAKE_OPTIONS = gnu no-dependencies - -SUBDIRS = tests - -INCLUDES = -I$(top_srcdir) -DOPERATION_$* - -noinst_LTLIBRARIES = libmpz.la -libmpz_la_SOURCES = \ - abs.c add.c add_ui.c addmul_ui.c and.c array_init.c \ - bin_ui.c bin_uiui.c cdiv_q.c \ - cdiv_q_ui.c cdiv_qr.c cdiv_qr_ui.c cdiv_r.c cdiv_r_ui.c cdiv_ui.c \ - clear.c clrbit.c cmp.c cmp_si.c cmp_ui.c cmpabs.c cmpabs_ui.c com.c \ - divexact.c dump.c fac_ui.c fdiv_q.c fdiv_q_2exp.c fdiv_q_ui.c \ - fdiv_qr.c fdiv_qr_ui.c fdiv_r.c fdiv_r_2exp.c fdiv_r_ui.c fdiv_ui.c \ - fib_ui.c fits_sint_p.c fits_slong_p.c fits_sshort_p.c fits_uint_p.c \ - fits_ulong_p.c fits_ushort_p.c gcd.c gcd_ui.c gcdext.c get_d.c get_si.c \ - get_str.c get_ui.c getlimbn.c hamdist.c init.c inp_raw.c inp_str.c \ - invert.c ior.c iset.c iset_d.c iset_si.c iset_str.c iset_ui.c \ - jacobi.c kronsz.c kronuz.c kronzs.c kronzu.c \ - lcm.c legendre.c mod.c mul.c mul_2exp.c neg.c nextprime.c \ - out_raw.c out_str.c perfpow.c perfsqr.c popcount.c pow_ui.c powm.c \ - powm_ui.c pprime_p.c random.c random2.c realloc.c remove.c root.c rrandomb.c \ - scan0.c scan1.c set.c set_d.c set_f.c set_q.c set_si.c set_str.c \ - set_ui.c setbit.c size.c sizeinbase.c sqrt.c sqrtrem.c sub.c \ - sub_ui.c swap.c tdiv_ui.c tdiv_q.c tdiv_q_2exp.c tdiv_q_ui.c tdiv_qr.c \ - tdiv_qr_ui.c tdiv_r.c tdiv_r_2exp.c tdiv_r_ui.c tstbit.c ui_pow_ui.c \ - urandomb.c urandomm.c xor.c - -EXTRA_DIST = mul_siui.c -nodist_libmpz_la_SOURCES = mul_si.c mul_ui.c -CLEANFILES = $(nodist_libmpz_la_SOURCES) - -mul_si.c: $(srcdir)/mul_siui.c - cp $(srcdir)/mul_siui.c mul_si.c -mul_ui.c: $(srcdir)/mul_siui.c - cp $(srcdir)/mul_siui.c mul_ui.c diff --git a/rts/gmp/mpz/Makefile.in b/rts/gmp/mpz/Makefile.in deleted file mode 100644 index e0f2cdc..0000000 --- a/rts/gmp/mpz/Makefile.in +++ /dev/null @@ -1,457 +0,0 @@ -# Makefile.in generated automatically by automake 1.4a from Makefile.am - -# Copyright (C) 1994, 1995-8, 1999 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. - -SHELL = @SHELL@ - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -bindir = @bindir@ -sbindir = @sbindir@ -libexecdir = @libexecdir@ -datadir = @datadir@ -sysconfdir = @sysconfdir@ -sharedstatedir = @sharedstatedir@ -localstatedir = @localstatedir@ -libdir = @libdir@ -infodir = @infodir@ -mandir = @mandir@ -includedir = @includedir@ -oldincludedir = /usr/include - -DESTDIR = - -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ - -top_builddir = .. - -ACLOCAL = @ACLOCAL@ -AUTOCONF = @AUTOCONF@ -AUTOMAKE = @AUTOMAKE@ -AUTOHEADER = @AUTOHEADER@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_FLAG = -transform = @program_transform_name@ - -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : - -@SET_MAKE@ -build_alias = @build_alias@ -build_triplet = @build@ -host_alias = @host_alias@ -host_triplet = @host@ -target_alias = @target_alias@ -target_triplet = @target@ -AMDEP = @AMDEP@ -AMTAR = @AMTAR@ -AR = @AR@ -AS = @AS@ -AWK = @AWK@ -CALLING_CONVENTIONS_OBJS = @CALLING_CONVENTIONS_OBJS@ -CC = @CC@ -CCAS = @CCAS@ -CPP = @CPP@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -EXEEXT = @EXEEXT@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -M4 = @M4@ -MAINT = @MAINT@ -MAKEINFO = @MAKEINFO@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -RANLIB = @RANLIB@ -SPEED_CYCLECOUNTER_OBJS = @SPEED_CYCLECOUNTER_OBJS@ -STRIP = @STRIP@ -U = @U@ -VERSION = @VERSION@ -gmp_srclinks = @gmp_srclinks@ -install_sh = @install_sh@ -mpn_objects = @mpn_objects@ -mpn_objs_in_libgmp = @mpn_objs_in_libgmp@ - -# Copyright (C) 1996, 1998, 1999, 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 the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# The GNU MP Library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with the GNU MP Library; see the file COPYING.LIB. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -# MA 02111-1307, USA. - - -AUTOMAKE_OPTIONS = gnu no-dependencies - -SUBDIRS = - -INCLUDES = -I$(top_srcdir) -DOPERATION_$* - -noinst_LTLIBRARIES = libmpz.la -libmpz_la_SOURCES = \ - abs.c add.c add_ui.c addmul_ui.c and.c array_init.c \ - bin_ui.c bin_uiui.c cdiv_q.c \ - cdiv_q_ui.c cdiv_qr.c cdiv_qr_ui.c cdiv_r.c cdiv_r_ui.c cdiv_ui.c \ - clear.c clrbit.c cmp.c cmp_si.c cmp_ui.c cmpabs.c cmpabs_ui.c com.c \ - divexact.c dump.c fac_ui.c fdiv_q.c fdiv_q_2exp.c fdiv_q_ui.c \ - fdiv_qr.c fdiv_qr_ui.c fdiv_r.c fdiv_r_2exp.c fdiv_r_ui.c fdiv_ui.c \ - fib_ui.c fits_sint_p.c fits_slong_p.c fits_sshort_p.c fits_uint_p.c \ - fits_ulong_p.c fits_ushort_p.c gcd.c gcd_ui.c gcdext.c get_d.c get_si.c \ - get_str.c get_ui.c getlimbn.c hamdist.c init.c inp_raw.c inp_str.c \ - invert.c ior.c iset.c iset_d.c iset_si.c iset_str.c iset_ui.c \ - jacobi.c kronsz.c kronuz.c kronzs.c kronzu.c \ - lcm.c legendre.c mod.c mul.c mul_2exp.c neg.c nextprime.c \ - out_raw.c out_str.c perfpow.c perfsqr.c popcount.c pow_ui.c powm.c \ - powm_ui.c pprime_p.c random.c random2.c realloc.c remove.c root.c rrandomb.c \ - scan0.c scan1.c set.c set_d.c set_f.c set_q.c set_si.c set_str.c \ - set_ui.c setbit.c size.c sizeinbase.c sqrt.c sqrtrem.c sub.c \ - sub_ui.c swap.c tdiv_ui.c tdiv_q.c tdiv_q_2exp.c tdiv_q_ui.c tdiv_qr.c \ - tdiv_qr_ui.c tdiv_r.c tdiv_r_2exp.c tdiv_r_ui.c tstbit.c ui_pow_ui.c \ - urandomb.c urandomm.c xor.c - - -EXTRA_DIST = mul_siui.c -nodist_libmpz_la_SOURCES = mul_si.c mul_ui.c -CLEANFILES = $(nodist_libmpz_la_SOURCES) -subdir = mpz -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I.. -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -LIBS = @LIBS@ -libmpz_la_LDFLAGS = -libmpz_la_LIBADD = -am_libmpz_la_OBJECTS = abs.lo add.lo add_ui.lo addmul_ui.lo and.lo \ -array_init.lo bin_ui.lo bin_uiui.lo cdiv_q.lo cdiv_q_ui.lo cdiv_qr.lo \ -cdiv_qr_ui.lo cdiv_r.lo cdiv_r_ui.lo cdiv_ui.lo clear.lo clrbit.lo \ -cmp.lo cmp_si.lo cmp_ui.lo cmpabs.lo cmpabs_ui.lo com.lo divexact.lo \ -dump.lo fac_ui.lo fdiv_q.lo fdiv_q_2exp.lo fdiv_q_ui.lo fdiv_qr.lo \ -fdiv_qr_ui.lo fdiv_r.lo fdiv_r_2exp.lo fdiv_r_ui.lo fdiv_ui.lo \ -fib_ui.lo fits_sint_p.lo fits_slong_p.lo fits_sshort_p.lo \ -fits_uint_p.lo fits_ulong_p.lo fits_ushort_p.lo gcd.lo gcd_ui.lo \ -gcdext.lo get_d.lo get_si.lo get_str.lo get_ui.lo getlimbn.lo \ -hamdist.lo init.lo inp_raw.lo inp_str.lo invert.lo ior.lo iset.lo \ -iset_d.lo iset_si.lo iset_str.lo iset_ui.lo jacobi.lo kronsz.lo \ -kronuz.lo kronzs.lo kronzu.lo lcm.lo legendre.lo mod.lo mul.lo \ -mul_2exp.lo neg.lo nextprime.lo out_raw.lo out_str.lo perfpow.lo \ -perfsqr.lo popcount.lo pow_ui.lo powm.lo powm_ui.lo pprime_p.lo \ -random.lo random2.lo realloc.lo remove.lo root.lo rrandomb.lo scan0.lo \ -scan1.lo set.lo set_d.lo set_f.lo set_q.lo set_si.lo set_str.lo \ -set_ui.lo setbit.lo size.lo sizeinbase.lo sqrt.lo sqrtrem.lo sub.lo \ -sub_ui.lo swap.lo tdiv_ui.lo tdiv_q.lo tdiv_q_2exp.lo tdiv_q_ui.lo \ -tdiv_qr.lo tdiv_qr_ui.lo tdiv_r.lo tdiv_r_2exp.lo tdiv_r_ui.lo \ -tstbit.lo ui_pow_ui.lo urandomb.lo urandomm.lo xor.lo -nodist_libmpz_la_OBJECTS = mul_si.lo mul_ui.lo -libmpz_la_OBJECTS = $(am_libmpz_la_OBJECTS) $(nodist_libmpz_la_OBJECTS) -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CFLAGS = @CFLAGS@ -CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(libmpz_la_SOURCES) -DIST_COMMON = README Makefile.am Makefile.in - - -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -GZIP_ENV = --best -depcomp = -SOURCES = $(libmpz_la_SOURCES) $(nodist_libmpz_la_SOURCES) -OBJECTS = $(am_libmpz_la_OBJECTS) $(nodist_libmpz_la_OBJECTS) - -all: all-redirect -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) - cd $(top_srcdir) && $(AUTOMAKE) --gnu mpz/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-noinstLTLIBRARIES: - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - -distclean-noinstLTLIBRARIES: - -maintainer-clean-noinstLTLIBRARIES: - -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) - -clean-compile: - -distclean-compile: - -rm -f *.tab.c - -maintainer-clean-compile: - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -libmpz.la: $(libmpz_la_OBJECTS) $(libmpz_la_DEPENDENCIES) - $(LINK) $(libmpz_la_LDFLAGS) $(libmpz_la_OBJECTS) $(libmpz_la_LIBADD) $(LIBS) -.c.o: - $(COMPILE) -c $< -.c.obj: - $(COMPILE) -c `cygpath -w $<` -.c.lo: - $(LTCOMPILE) -c -o $@ $< - -# 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. - -all-recursive install-data-recursive install-exec-recursive \ -installdirs-recursive install-recursive uninstall-recursive \ -check-recursive installcheck-recursive info-recursive dvi-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; 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; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $(MAKEFLAGS); amf=$$2; \ - dot_seen=no; \ - rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ - rev="$$subdir $$rev"; \ - if test "$$subdir" = "."; then dot_seen=yes; else :; fi; \ - done; \ - test "$$dot_seen" = "no" && rev=". $$rev"; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done - -tags: TAGS - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -f$$here/ID $$unique $(LISP) - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ - || etags $(ETAGS_ARGS) $$tags $$unique $(LISP) - -mostlyclean-tags: - -clean-tags: - -distclean-tags: - -rm -f TAGS ID - -maintainer-clean-tags: - -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) - -distdir: $(DISTFILES) - @for file in $(DISTFILES); do \ - d=$(srcdir); \ - if test -d $$d/$$file; then \ - cp -pR $$d/$$file $(distdir); \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file || :; \ - fi; \ - done - for subdir in $(SUBDIRS); do \ - if test "$$subdir" = .; then :; else \ - test -d $(distdir)/$$subdir \ - || mkdir $(distdir)/$$subdir \ - || exit 1; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ - || exit 1; \ - fi; \ - done -info-am: -info: info-recursive -dvi-am: -dvi: dvi-recursive -check-am: all-am -check: check-recursive -installcheck-am: -installcheck: installcheck-recursive -install-exec-am: -install-exec: install-exec-recursive - -install-data-am: -install-data: install-data-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -install: install-recursive -uninstall-am: -uninstall: uninstall-recursive -all-am: Makefile $(LTLIBRARIES) -all-redirect: all-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install -installdirs: installdirs-recursive -installdirs-am: - - -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* - -maintainer-clean-generic: - -rm -f Makefile.in -mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags \ - mostlyclean-generic - -mostlyclean: mostlyclean-recursive - -clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \ - clean-tags clean-generic mostlyclean-am - -clean: clean-recursive - -distclean-am: distclean-noinstLTLIBRARIES distclean-compile \ - distclean-libtool distclean-tags distclean-generic \ - clean-am - -rm -f libtool - -distclean: distclean-recursive - -maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-generic \ - distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." - -maintainer-clean: maintainer-clean-recursive - -.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \ -clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \ -mostlyclean-compile distclean-compile clean-compile \ -maintainer-clean-compile mostlyclean-libtool distclean-libtool \ -clean-libtool maintainer-clean-libtool install-recursive \ -uninstall-recursive install-data-recursive uninstall-data-recursive \ -install-exec-recursive uninstall-exec-recursive installdirs-recursive \ -uninstalldirs-recursive all-recursive check-recursive \ -installcheck-recursive info-recursive dvi-recursive \ -mostlyclean-recursive distclean-recursive clean-recursive \ -maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ -install-exec install-data-am install-data install-am install \ -uninstall-am uninstall all-redirect all-am all install-strip \ -installdirs-am installdirs mostlyclean-generic distclean-generic \ -clean-generic maintainer-clean-generic clean mostlyclean distclean \ -maintainer-clean - - -mul_si.c: $(srcdir)/mul_siui.c - cp $(srcdir)/mul_siui.c mul_si.c -mul_ui.c: $(srcdir)/mul_siui.c - cp $(srcdir)/mul_siui.c mul_ui.c - -# 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/rts/gmp/mpz/README b/rts/gmp/mpz/README deleted file mode 100644 index 06b481d..0000000 --- a/rts/gmp/mpz/README +++ /dev/null @@ -1,23 +0,0 @@ -This directory contains functions for GMP's integer function layer. - -In this version of GMP, integers are represented like in the figure below. -(Please note that the format might change between every version, and that -depending on the internal format in any way is a bad idea.) - - most least -significant significant - limb limb - - _mp_d - / - / - \/ - ____ ____ ____ ____ ____ - |____|____|____|____|____| - - <------- _mp_size -------> - - -The most significant limb will be non-zero. The _mp_size field's sign -reflects the sign of the number. Its absolute value is the count of limbs -in the number. diff --git a/rts/gmp/mpz/abs.c b/rts/gmp/mpz/abs.c deleted file mode 100644 index 0b5eab1..0000000 --- a/rts/gmp/mpz/abs.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_abs(dst, src) -- Assign the absolute value of SRC to DST. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_abs (mpz_ptr w, mpz_srcptr u) -#else -mpz_abs (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t size; - - size = ABS (u->_mp_size); - - if (u != w) - { - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - } - - w->_mp_size = size; -} diff --git a/rts/gmp/mpz/add.c b/rts/gmp/mpz/add.c deleted file mode 100644 index a22c377..0000000 --- a/rts/gmp/mpz/add.c +++ /dev/null @@ -1,123 +0,0 @@ -/* mpz_add -- Add two integers. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_add (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_add (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -madd (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -madd (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_srcptr up, vp; - mp_ptr wp; - mp_size_t usize, vsize, wsize; - mp_size_t abs_usize; - mp_size_t abs_vsize; - - usize = u->_mp_size; - vsize = v->_mp_size; - abs_usize = ABS (usize); - abs_vsize = ABS (vsize); - - if (abs_usize < abs_vsize) - { - /* Swap U and V. */ - MPZ_SRCPTR_SWAP (u, v); - MP_SIZE_T_SWAP (usize, vsize); - MP_SIZE_T_SWAP (abs_usize, abs_vsize); - } - - /* True: ABS_USIZE >= ABS_VSIZE. */ - - /* If not space for w (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (u or v may be the same as w). */ - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - if ((usize ^ vsize) < 0) - { - /* U and V have different sign. Need to compare them to determine - which operand to subtract from which. */ - - /* This test is right since ABS_USIZE >= ABS_VSIZE. */ - if (abs_usize != abs_vsize) - { - mpn_sub (wp, up, abs_usize, vp, abs_vsize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - else if (mpn_cmp (up, vp, abs_usize) < 0) - { - mpn_sub_n (wp, vp, up, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize >= 0) - wsize = -wsize; - } - else - { - mpn_sub_n (wp, up, vp, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - } - else - { - /* U and V have same sign. Add them. */ - mp_limb_t cy_limb = mpn_add (wp, up, abs_usize, vp, abs_vsize); - wp[abs_usize] = cy_limb; - wsize = abs_usize + cy_limb; - if (usize < 0) - wsize = -wsize; - } - - w->_mp_size = wsize; -} diff --git a/rts/gmp/mpz/add_ui.c b/rts/gmp/mpz/add_ui.c deleted file mode 100644 index 28dbd71..0000000 --- a/rts/gmp/mpz/add_ui.c +++ /dev/null @@ -1,84 +0,0 @@ -/* mpz_add_ui -- Add an mpz_t and an unsigned one-word integer. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_add_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_add_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_srcptr up; - mp_ptr wp; - mp_size_t usize, wsize; - mp_size_t abs_usize; - - usize = u->_mp_size; - abs_usize = ABS (usize); - - /* If not space for W (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->_mp_d; - wp = w->_mp_d; - - if (abs_usize == 0) - { - wp[0] = v; - w->_mp_size = v != 0; - return; - } - - if (usize >= 0) - { - mp_limb_t cy; - cy = mpn_add_1 (wp, up, abs_usize, (mp_limb_t) v); - wp[abs_usize] = cy; - wsize = abs_usize + cy; - } - else - { - /* The signs are different. Need exact comparison to determine - which operand to subtract from which. */ - if (abs_usize == 1 && up[0] < v) - { - wp[0] = v - up[0]; - wsize = 1; - } - else - { - mpn_sub_1 (wp, up, abs_usize, (mp_limb_t) v); - /* Size can decrease with at most one limb. */ - wsize = -(abs_usize - (wp[abs_usize - 1] == 0)); - } - } - - w->_mp_size = wsize; -} diff --git a/rts/gmp/mpz/addmul_ui.c b/rts/gmp/mpz/addmul_ui.c deleted file mode 100644 index 7b38d36..0000000 --- a/rts/gmp/mpz/addmul_ui.c +++ /dev/null @@ -1,214 +0,0 @@ -/* mpz_addmul_ui(prodsum, multiplier, small_multiplicand) -- - Add MULTIPLICATOR times SMALL_MULTIPLICAND to PRODSUM. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -static mp_limb_t mpn_neg1 _PROTO ((mp_ptr, mp_size_t)); - -#if 0 -#undef MPN_NORMALIZE -#define MPN_NORMALIZE(DST, NLIMBS) \ - do { \ - while (--(NLIMBS) >= 0 && (DST)[NLIMBS] == 0) \ - ; \ - (NLIMBS)++; \ - } while (0) -#undef MPN_NORMALIZE_NOT_ZERO -#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \ - do { \ - while ((DST)[--(NLIMBS)] == 0) \ - ; \ - (NLIMBS)++; \ - } while (0) -#endif - -void -#if __STDC__ -mpz_addmul_ui (mpz_ptr rz, mpz_srcptr az, unsigned long int bu) -#else -mpz_addmul_ui (rz, az, bu) - mpz_ptr rz; - mpz_srcptr az; - unsigned long int bu; -#endif -{ - mp_size_t rn, an; - mp_ptr rp, ap; - - an = SIZ (az); - - /* If either multiplier is zero, result is unaffected. */ - if (bu == 0 || an == 0) - return; - - rn = SIZ (rz); - - if (rn == 0) - { - mp_limb_t cy; - - an = ABS (an); - if (ALLOC (rz) <= an) - _mpz_realloc (rz, an + 1); - rp = PTR (rz); - ap = PTR (az); - cy = mpn_mul_1 (rp, ap, an, (mp_limb_t) bu); - rp[an] = cy; - an += cy != 0; - SIZ (rz) = SIZ (az) >= 0 ? an : -an; - return; - } - - if ((an ^ rn) >= 0) - { - /* Sign of operands are the same--really add. */ - an = ABS (an); - rn = ABS (rn); - if (rn > an) - { - mp_limb_t cy; - if (ALLOC (rz) <= rn) - _mpz_realloc (rz, rn + 1); - rp = PTR (rz); - ap = PTR (az); - cy = mpn_addmul_1 (rp, ap, an, (mp_limb_t) bu); - cy = mpn_add_1 (rp + an, rp + an, rn - an, cy); - rp[rn] = cy; - rn += cy != 0; - SIZ (rz) = SIZ (rz) >= 0 ? rn : -rn; - return; - } - else - { - mp_limb_t cy; - if (ALLOC (rz) <= an) - _mpz_realloc (rz, an + 1); - rp = PTR (rz); - ap = PTR (az); - cy = mpn_addmul_1 (rp, ap, rn, (mp_limb_t) bu); - if (an != rn) - { - mp_limb_t cy2; - cy2 = mpn_mul_1 (rp + rn, ap + rn, an - rn, (mp_limb_t) bu); - cy = cy2 + mpn_add_1 (rp + rn, rp + rn, an - rn, cy); - } - rn = an; - rp[rn] = cy; - rn += cy != 0; - SIZ (rz) = SIZ (rz) >= 0 ? rn : -rn; - return; - } - } - else - { - /* Sign of operands are different--actually subtract. */ - an = ABS (an); - rn = ABS (rn); - if (rn > an) - { - mp_limb_t cy; - rp = PTR (rz); - ap = PTR (az); - cy = mpn_submul_1 (rp, ap, an, (mp_limb_t) bu); - cy = mpn_sub_1 (rp + an, rp + an, rn - an, cy); - if (cy != 0) - { - mpn_neg1 (rp, rn); - MPN_NORMALIZE_NOT_ZERO (rp, rn); - } - else - { - MPN_NORMALIZE (rp, rn); - rn = -rn; - } - - SIZ (rz) = SIZ (rz) >= 0 ? -rn : rn; - return; - } - else - { - /* Tricky case. We need to subtract an operand that might be larger - than the minuend. To avoid allocating temporary space, we compute - a*b-r instead of r-a*b and then negate. */ - mp_limb_t cy; - if (ALLOC (rz) <= an) - _mpz_realloc (rz, an + 1); - rp = PTR (rz); - ap = PTR (az); - cy = mpn_submul_1 (rp, ap, rn, (mp_limb_t) bu); - if (an != rn) - { - mp_limb_t cy2; - cy -= mpn_neg1 (rp, rn); - cy2 = mpn_mul_1 (rp + rn, ap + rn, an - rn, (mp_limb_t) bu); - if (cy == ~(mp_limb_t) 0) - cy = cy2 - mpn_sub_1 (rp + rn, rp + rn, an - rn, (mp_limb_t) 1); - else - cy = cy2 + mpn_add_1 (rp + rn, rp + rn, an - rn, cy); - rp[an] = cy; - rn = an + (cy != 0); - rn -= rp[rn - 1] == 0; - } - else if (cy != 0) - { - cy -= mpn_neg1 (rp, rn); - rp[an] = cy; - rn = an + 1; - MPN_NORMALIZE_NOT_ZERO (rp, rn); - } - else - { - rn = an; - MPN_NORMALIZE (rp, rn); - rn = -rn; - } - - SIZ (rz) = SIZ (rz) >= 0 ? -rn : rn; - return; - } - } -} - -static mp_limb_t -#if __STDC__ -mpn_neg1 (mp_ptr rp, mp_size_t rn) -#else -mpn_neg1 (rp, rn) - mp_ptr rp; - mp_size_t rn; -#endif -{ - mp_size_t i; - - while (rn != 0 && rp[0] == 0) - rp++, rn--; - - if (rn != 0) - { - rp[0] = -rp[0]; - for (i = 1; i < rn; i++) - rp[i] = ~rp[i]; - return 1; - } - return 0; -} diff --git a/rts/gmp/mpz/and.c b/rts/gmp/mpz/and.c deleted file mode 100644 index 354e945..0000000 --- a/rts/gmp/mpz/and.c +++ /dev/null @@ -1,278 +0,0 @@ -/* mpz_and -- Logical and. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_and (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2) -#else -mpz_and (res, op1, op2) - mpz_ptr res; - mpz_srcptr op1; - mpz_srcptr op2; -#endif -{ - mp_srcptr op1_ptr, op2_ptr; - mp_size_t op1_size, op2_size; - mp_ptr res_ptr; - mp_size_t res_size; - mp_size_t i; - TMP_DECL (marker); - - TMP_MARK (marker); - op1_size = op1->_mp_size; - op2_size = op2->_mp_size; - - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - - if (op1_size >= 0) - { - if (op2_size >= 0) - { - res_size = MIN (op1_size, op2_size); - /* First loop finds the size of the result. */ - for (i = res_size - 1; i >= 0; i--) - if ((op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - /* Second loop computes the real result. */ - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & op2_ptr[i]; - - res->_mp_size = res_size; - return; - } - else /* op2_size < 0 */ - { - /* Fall through to the code at the end of the function. */ - } - } - else - { - if (op2_size < 0) - { - mp_ptr opx; - mp_limb_t cy; - mp_size_t res_alloc; - - /* Both operands are negative, so will be the result. - -((-OP1) & (-OP2)) = -(~(OP1 - 1) & ~(OP2 - 1)) = - = ~(~(OP1 - 1) & ~(OP2 - 1)) + 1 = - = ((OP1 - 1) | (OP2 - 1)) + 1 */ - - /* It might seem as we could end up with an (invalid) result with - a leading zero-limb here when one of the operands is of the - type 1,,0,,..,,.0. But some analysis shows that we surely - would get carry into the zero-limb in this situation... */ - - op1_size = -op1_size; - op2_size = -op2_size; - - res_alloc = 1 + MAX (op1_size, op2_size); - - opx = (mp_ptr) TMP_ALLOC (op1_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op1_ptr, op1_size, (mp_limb_t) 1); - op1_ptr = opx; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - res_ptr = res->_mp_d; - /* Don't re-read OP1_PTR and OP2_PTR. They point to - temporary space--never to the space RES->_mp_d used - to point to before reallocation. */ - } - - if (op1_size >= op2_size) - { - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op1_size; - } - else - { - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op2_size; - } - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - - res->_mp_size = -res_size; - TMP_FREE (marker); - return; - } - else - { - /* We should compute -OP1 & OP2. Swap OP1 and OP2 and fall - through to the code that handles OP1 & -OP2. */ - MPZ_SRCPTR_SWAP (op1, op2); - MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size); - } - - } - - { -#if ANDNEW - mp_size_t op2_lim; - mp_size_t count; - - /* OP2 must be negated as with infinite precision. - - Scan from the low end for a non-zero limb. The first non-zero - limb is simply negated (two's complement). Any subsequent - limbs are one's complemented. Of course, we don't need to - handle more limbs than there are limbs in the other, positive - operand as the result for those limbs is going to become zero - anyway. */ - - /* Scan for the least significant non-zero OP2 limb, and zero the - result meanwhile for those limb positions. (We will surely - find a non-zero limb, so we can write the loop with one - termination condition only.) */ - for (i = 0; op2_ptr[i] == 0; i++) - res_ptr[i] = 0; - op2_lim = i; - - op2_size = -op2_size; - - if (op1_size <= op2_size) - { - /* The ones-extended OP2 is >= than the zero-extended OP1. - RES_SIZE <= OP1_SIZE. Find the exact size. */ - for (i = op1_size - 1; i > op2_lim; i--) - if ((op1_ptr[i] & ~op2_ptr[i]) != 0) - break; - res_size = i + 1; - for (i = res_size - 1; i > op2_lim; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - res_ptr[op2_lim] = op1_ptr[op2_lim] & -op2_ptr[op2_lim]; - /* Yes, this *can* happen! */ - MPN_NORMALIZE (res_ptr, res_size); - } - else - { - /* The ones-extended OP2 is < than the zero-extended OP1. - RES_SIZE == OP1_SIZE, since OP1 is normalized. */ - res_size = op1_size; - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, op1_size - op2_size); - for (i = op2_size - 1; i > op2_lim; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - res_ptr[op2_lim] = op1_ptr[op2_lim] & -op2_ptr[op2_lim]; - } - - res->_mp_size = res_size; -#else - - /* OP1 is positive and zero-extended, - OP2 is negative and ones-extended. - The result will be positive. - OP1 & -OP2 = OP1 & ~(OP2 - 1). */ - - mp_ptr opx; - - op2_size = -op2_size; - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (op1_size > op2_size) - { - /* The result has the same size as OP1, since OP1 is normalized - and longer than the ones-extended OP2. */ - res_size = op1_size; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - op1_ptr = op1->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_d used to point to before reallocation. */ - } - - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - res_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - - res->_mp_size = res_size; - } - else - { - /* Find out the exact result size. Ignore the high limbs of OP2, - OP1 is zero-extended and would make the result zero. */ - for (i = op1_size - 1; i >= 0; i--) - if ((op1_ptr[i] & ~op2_ptr[i]) != 0) - break; - res_size = i + 1; - - /* Handle allocation, now then we know exactly how much space is - needed for the result. */ - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - op1_ptr = op1->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_d used to point to before reallocation. */ - } - - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & ~op2_ptr[i]; - - res->_mp_size = res_size; - } -#endif - } - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/array_init.c b/rts/gmp/mpz/array_init.c deleted file mode 100644 index 1c22046..0000000 --- a/rts/gmp/mpz/array_init.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_array_init (array, array_size, size_per_elem) -- - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_array_init (mpz_ptr arr, mp_size_t arr_size, mp_size_t nbits) -#else -mpz_array_init (arr, arr_size, nbits) - mpz_ptr arr; - mp_size_t arr_size; - mp_size_t nbits; -#endif -{ - register mp_ptr p; - register size_t i; - mp_size_t nlimbs; - - nlimbs = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - p = (mp_ptr) (*_mp_allocate_func) (arr_size * nlimbs * BYTES_PER_MP_LIMB); - - for (i = 0; i < arr_size; i++) - { - arr[i]._mp_alloc = nlimbs + 1; /* Yes, lie a little... */ - arr[i]._mp_size = 0; - arr[i]._mp_d = p + i * nlimbs; - } -} diff --git a/rts/gmp/mpz/bin_ui.c b/rts/gmp/mpz/bin_ui.c deleted file mode 100644 index a7a6c98..0000000 --- a/rts/gmp/mpz/bin_ui.c +++ /dev/null @@ -1,141 +0,0 @@ -/* mpz_bin_uiui - compute n over k. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* This is a poor implementation. Look at bin_uiui.c for improvement ideas. - In fact consider calling mpz_bin_uiui() when the arguments fit, leaving - the code here only for big n. - - The identity bin(n,k) = (-1)^k * bin(-n+k-1,k) can be found in Knuth vol - 1 section 1.2.6 part G. */ - - -/* Enhancement: use mpn_divexact_1 when it exists */ -#define DIVIDE() \ - ASSERT (SIZ(r) > 0); \ - ASSERT_NOCARRY (mpn_divrem_1 (PTR(r), (mp_size_t) 0, \ - PTR(r), SIZ(r), kacc)); \ - SIZ(r) -= (PTR(r)[SIZ(r)-1] == 0); - -void -#if __STDC__ -mpz_bin_ui (mpz_ptr r, mpz_srcptr n, unsigned long int k) -#else -mpz_bin_ui (r, n, k) - mpz_ptr r; - mpz_srcptr n; - unsigned long int k; -#endif -{ - mpz_t ni; - mp_limb_t i; - mpz_t nacc; - mp_limb_t kacc; - mp_size_t negate; - - if (mpz_sgn (n) < 0) - { - /* bin(n,k) = (-1)^k * bin(-n+k-1,k), and set ni = -n+k-1 - k = -n-1 */ - mpz_init (ni); - mpz_neg (ni, n); - mpz_sub_ui (ni, ni, 1L); - negate = (k & 1); /* (-1)^k */ - } - else - { - /* bin(n,k) == 0 if k>n - (no test for this under the n<0 case, since -n+k-1 >= k there) */ - if (mpz_cmp_ui (n, k) < 0) - { - mpz_set_ui (r, 0L); - return; - } - - /* set ni = n-k */ - mpz_init (ni); - mpz_sub_ui (ni, n, k); - negate = 0; - } - - /* Now wanting bin(ni+k,k), with ni positive, and "negate" is the sign (0 - for positive, 1 for negative). */ - mpz_set_ui (r, 1L); - - /* Rewrite bin(n,k) as bin(n,n-k) if that is smaller. In this case it's - whether ni+k-k < k meaning ni>= 1; - nacclow >>= 1; - } - mpz_div_2exp (nacc, nacc, c); -#endif - - mpz_add_ui (ni, ni, 1); - mpz_mul (nacc, nacc, ni); - umul_ppmm (k1, k0, kacc, i); - if (k1 != 0) - { - /* Accumulator overflow. Perform bignum step. */ - mpz_mul (r, r, nacc); - mpz_set_ui (nacc, 1); - DIVIDE (); - kacc = i; - } - else - { - /* Save new products in accumulators to keep accumulating. */ - kacc = k0; - } - } - - mpz_mul (r, r, nacc); - DIVIDE (); - SIZ(r) = (SIZ(r) ^ -negate) + negate; - - mpz_clear (nacc); - mpz_clear (ni); -} diff --git a/rts/gmp/mpz/bin_uiui.c b/rts/gmp/mpz/bin_uiui.c deleted file mode 100644 index b37541b..0000000 --- a/rts/gmp/mpz/bin_uiui.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mpz_bin_uiui - compute n over k. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* Avoid reallocs by rounding up any new size */ -#define ROUNDUP_MASK 15 - -/* Enhancement: use mpn_divexact_1 when it exists */ -#define MULDIV() \ - MPZ_REALLOC (r, (SIZ(r)+1)|ROUNDUP_MASK); \ - PTR(r)[SIZ(r)] = mpn_mul_1 (PTR(r), PTR(r), SIZ(r), nacc); \ - ASSERT_NOCARRY (mpn_divrem_1 (PTR(r), (mp_size_t) 0, \ - PTR(r), SIZ(r)+1, kacc)); \ - SIZ(r) += (PTR(r)[SIZ(r)] != 0); - -void -#if __STDC__ -mpz_bin_uiui (mpz_ptr r, unsigned long int n, unsigned long int k) -#else -mpz_bin_uiui (r, n, k) - mpz_ptr r; - unsigned long int n; - unsigned long int k; -#endif -{ - unsigned long int i, j; - mp_limb_t nacc, kacc; - unsigned long int cnt; - - /* bin(n,k) = 0 if k>n. */ - if (n < k) - { - mpz_set_ui (r, 0); - return; - } - - /* Rewrite bin(n,k) as bin(n,n-k) if that is smaller. */ - k = MIN (k, n-k); - - /* bin(n,0) = 1 */ - if (k == 0) - { - mpz_set_ui (r, 1); - return; - } - - j = n - k + 1; - mpz_set_ui (r, j); - - /* Initialize accumulators. */ - nacc = 1; - kacc = 1; - - cnt = 0; - for (i = 2; i <= k; i++) - { - mp_limb_t n1, n0, k1, k0; - - j++; -#if 0 - /* Remove common multiples of 2. This will allow us to accumulate - more in nacc and kacc before we need a bignum step. It would make - sense to cancel factors of 3, 5, etc too, but this would be best - handled by sieving out factors. Alternatively, we could perform a - gcd of the accumulators just as they have overflown, and keep - accumulating until the gcd doesn't remove a significant factor. */ - while (((nacc | kacc) & 1) == 0) - { - nacc >>= 1; - kacc >>= 1; - } -#else - cnt = ((nacc | kacc) & 1) ^ 1; - nacc >>= cnt; - kacc >>= cnt; -#endif - /* Accumulate next multiples. */ - umul_ppmm (n1, n0, nacc, j); - umul_ppmm (k1, k0, kacc, i); - if (n1 != 0) - { - /* Accumulator overflow. Perform bignum step. */ - MULDIV (); - nacc = j; - kacc = i; - } - else - { - if (k1 != 0) abort (); - /* Save new products in accumulators to keep accumulating. */ - nacc = n0; - kacc = k0; - } - } - - /* Take care of whatever is left in accumulators. */ - MULDIV (); -} diff --git a/rts/gmp/mpz/cdiv_q.c b/rts/gmp/mpz/cdiv_q.c deleted file mode 100644 index b15ba8a..0000000 --- a/rts/gmp/mpz/cdiv_q.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_cdiv_q -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_q (mpz_ptr quot, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_q (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t dividend_size = dividend->_mp_size; - mp_size_t divisor_size = divisor->_mp_size; - mpz_t rem; - TMP_DECL (marker); - - TMP_MARK (marker); - - MPZ_TMP_INIT (rem, ABS (divisor_size)); - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend_size) >= 0 && rem->_mp_size != 0) - mpz_add_ui (quot, quot, 1L); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/cdiv_q_ui.c b/rts/gmp/mpz/cdiv_q_ui.c deleted file mode 100644 index 74f3a90..0000000 --- a/rts/gmp/mpz/cdiv_q_ui.c +++ /dev/null @@ -1,67 +0,0 @@ -/* mpz_cdiv_q_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - { - mpn_incr_u (quot_ptr, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/cdiv_qr.c b/rts/gmp/mpz/cdiv_qr.c deleted file mode 100644 index 29c7c41..0000000 --- a/rts/gmp/mpz/cdiv_qr.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_cdiv_qr -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_qr (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mp_size_t xsize; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the quotient and - remainder have been preliminary calculated. We have to copy it to - temporary space if it's the same variable as either QUOT or REM. */ - if (quot == divisor || rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - xsize = dividend->_mp_size ^ divisor_size;; - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if (xsize >= 0 && rem->_mp_size != 0) - { - mpz_add_ui (quot, quot, 1L); - mpz_sub (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/cdiv_qr_ui.c b/rts/gmp/mpz/cdiv_qr_ui.c deleted file mode 100644 index a7873c6..0000000 --- a/rts/gmp/mpz/cdiv_qr_ui.c +++ /dev/null @@ -1,71 +0,0 @@ -/* mpz_cdiv_qr_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - { - mpn_incr_u (quot_ptr, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = -(remainder_limb != 0); - - return remainder_limb; -} diff --git a/rts/gmp/mpz/cdiv_r.c b/rts/gmp/mpz/cdiv_r.c deleted file mode 100644 index e96ce7e..0000000 --- a/rts/gmp/mpz/cdiv_r.c +++ /dev/null @@ -1,59 +0,0 @@ -/* mpz_cdiv_r -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_cdiv_r (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_cdiv_r (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) >= 0 && rem->_mp_size != 0) - mpz_sub (rem, rem, divisor); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/cdiv_r_ui.c b/rts/gmp/mpz/cdiv_r_ui.c deleted file mode 100644 index e17e238..0000000 --- a/rts/gmp/mpz/cdiv_r_ui.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mpz_cdiv_r_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - remainder_limb = divisor - remainder_limb; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = -(remainder_limb != 0); - - return remainder_limb; -} diff --git a/rts/gmp/mpz/cdiv_ui.c b/rts/gmp/mpz/cdiv_ui.c deleted file mode 100644 index 63547a7..0000000 --- a/rts/gmp/mpz/cdiv_ui.c +++ /dev/null @@ -1,50 +0,0 @@ -/* mpz_cdiv_ui -- Division rounding the quotient towards +infinity. The - remainder gets the opposite sign as the denominator. In order to make it - always fit into the return type, the negative of the true remainder is - returned. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_cdiv_ui (mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_cdiv_ui (dividend, divisor) - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size >= 0) - remainder_limb = divisor - remainder_limb; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/clear.c b/rts/gmp/mpz/clear.c deleted file mode 100644 index 5224553..0000000 --- a/rts/gmp/mpz/clear.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_clear -- de-allocate the space occupied by the dynamic digit space of - an integer. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_clear (mpz_ptr m) -#else -mpz_clear (m) - mpz_ptr m; -#endif -{ - (*_mp_free_func) (m->_mp_d, m->_mp_alloc * BYTES_PER_MP_LIMB); -} diff --git a/rts/gmp/mpz/clrbit.c b/rts/gmp/mpz/clrbit.c deleted file mode 100644 index 865d849..0000000 --- a/rts/gmp/mpz/clrbit.c +++ /dev/null @@ -1,114 +0,0 @@ -/* mpz_clrbit -- clear a specified bit. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_clrbit (mpz_ptr d, unsigned long int bit_index) -#else -mpz_clrbit (d, bit_index) - mpz_ptr d; - unsigned long int bit_index; -#endif -{ - mp_size_t dsize = d->_mp_size; - mp_ptr dp = d->_mp_d; - mp_size_t limb_index; - - limb_index = bit_index / BITS_PER_MP_LIMB; - if (dsize >= 0) - { - if (limb_index < dsize) - { - dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB)); - MPN_NORMALIZE (dp, dsize); - d->_mp_size = dsize; - } - else - ; - } - else - { - mp_size_t zero_bound; - - /* Simulate two's complement arithmetic, i.e. simulate - 1. Set OP = ~(OP - 1) [with infinitely many leading ones]. - 2. clear the bit. - 3. Set OP = ~OP + 1. */ - - dsize = -dsize; - - /* No upper bound on this loop, we're sure there's a non-zero limb - sooner ot later. */ - for (zero_bound = 0; ; zero_bound++) - if (dp[zero_bound] != 0) - break; - - if (limb_index > zero_bound) - { - if (limb_index < dsize) - dp[limb_index] |= (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - else - { - /* Ugh. The bit should be cleared outside of the end of the - number. We have to increase the size of the number. */ - if (d->_mp_alloc < limb_index + 1) - { - _mpz_realloc (d, limb_index + 1); - dp = d->_mp_d; - } - MPN_ZERO (dp + dsize, limb_index - dsize); - dp[limb_index] = (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = -(limb_index + 1); - } - } - else if (limb_index == zero_bound) - { - dp[limb_index] = ((dp[limb_index] - 1) - | ((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB))) + 1; - if (dp[limb_index] == 0) - { - mp_size_t i; - for (i = limb_index + 1; i < dsize; i++) - { - dp[i] += 1; - if (dp[i] != 0) - goto fin; - } - /* We got carry all way out beyond the end of D. Increase - its size (and allocation if necessary). */ - dsize++; - if (d->_mp_alloc < dsize) - { - _mpz_realloc (d, dsize); - dp = d->_mp_d; - } - dp[i] = 1; - d->_mp_size = -dsize; - fin:; - } - } - else - ; - } -} diff --git a/rts/gmp/mpz/cmp.c b/rts/gmp/mpz/cmp.c deleted file mode 100644 index 6062834..0000000 --- a/rts/gmp/mpz/cmp.c +++ /dev/null @@ -1,75 +0,0 @@ -/* mpz_cmp(u,v) -- Compare U, V. Return postive, zero, or negative - based on if U > V, U == V, or U < V. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef BERKELEY_MP -#include "mp.h" -#endif -#include "gmp.h" -#include "gmp-impl.h" - -#ifndef BERKELEY_MP -int -#if __STDC__ -mpz_cmp (mpz_srcptr u, mpz_srcptr v) -#else -mpz_cmp (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -int -#if __STDC__ -mcmp (mpz_srcptr u, mpz_srcptr v) -#else -mcmp (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t size; - mp_srcptr up, vp; - int cmp; - - if (usize != vsize) - return usize - vsize; - - if (usize == 0) - return 0; - - size = ABS (usize); - - up = u->_mp_d; - vp = v->_mp_d; - - cmp = mpn_cmp (up, vp, size); - - if (cmp == 0) - return 0; - - if ((cmp < 0) == (usize < 0)) - return 1; - else - return -1; -} diff --git a/rts/gmp/mpz/cmp_si.c b/rts/gmp/mpz/cmp_si.c deleted file mode 100644 index 0c2212f..0000000 --- a/rts/gmp/mpz/cmp_si.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_cmp_si(u,v) -- Compare an integer U with a single-word int V. - Return positive, zero, or negative based on if U > V, U == V, or U < V. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -_mpz_cmp_si (mpz_srcptr u, signed long int v_digit) -#else -_mpz_cmp_si (u, v_digit) - mpz_srcptr u; - signed long int v_digit; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize; - mp_limb_t u_digit; - - vsize = 0; - if (v_digit > 0) - vsize = 1; - else if (v_digit < 0) - { - vsize = -1; - v_digit = -v_digit; - } - - if (usize != vsize) - return usize - vsize; - - if (usize == 0) - return 0; - - u_digit = u->_mp_d[0]; - - if (u_digit == (mp_limb_t) (unsigned long) v_digit) - return 0; - - if (u_digit > (mp_limb_t) (unsigned long) v_digit) - return usize; - else - return -usize; -} diff --git a/rts/gmp/mpz/cmp_ui.c b/rts/gmp/mpz/cmp_ui.c deleted file mode 100644 index fd84f30..0000000 --- a/rts/gmp/mpz/cmp_ui.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_cmp_ui.c -- Compare a mpz_t a with an mp_limb_t b. Return positive, - zero, or negative based on if a > b, a == b, or a < b. - -Copyright (C) 1991, 1993, 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -_mpz_cmp_ui (mpz_srcptr u, unsigned long int v_digit) -#else -_mpz_cmp_ui (u, v_digit) - mpz_srcptr u; - unsigned long int v_digit; -#endif -{ - mp_size_t usize = u->_mp_size; - - if (usize == 0) - return -(v_digit != 0); - - if (usize == 1) - { - mp_limb_t u_digit; - - u_digit = u->_mp_d[0]; - if (u_digit > v_digit) - return 1; - if (u_digit < v_digit) - return -1; - return 0; - } - - return (usize > 0) ? 1 : -1; -} diff --git a/rts/gmp/mpz/cmpabs.c b/rts/gmp/mpz/cmpabs.c deleted file mode 100644 index 037d7a9..0000000 --- a/rts/gmp/mpz/cmpabs.c +++ /dev/null @@ -1,57 +0,0 @@ -/* mpz_cmpabs(u,v) -- Compare U, V. Return postive, zero, or negative - based on if U > V, U == V, or U < V. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_cmpabs (mpz_srcptr u, mpz_srcptr v) -#else -mpz_cmpabs (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t size; - mp_srcptr up, vp; - int cmp; - - usize = ABS (usize); - vsize = ABS (vsize); - - if (usize != vsize) - return usize - vsize; - - if (usize == 0) - return 0; - - up = u->_mp_d; - vp = v->_mp_d; - - cmp = mpn_cmp (up, vp, usize); - - return cmp; -} diff --git a/rts/gmp/mpz/cmpabs_ui.c b/rts/gmp/mpz/cmpabs_ui.c deleted file mode 100644 index db816b5..0000000 --- a/rts/gmp/mpz/cmpabs_ui.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpz_cmpabs_ui.c -- Compare a mpz_t a with an mp_limb_t b. Return positive, - zero, or negative based on if a > b, a == b, or a < b. - -Copyright (C) 1991, 1993, 1994, 1995, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_cmpabs_ui (mpz_srcptr u, unsigned long int v_digit) -#else -mpz_cmpabs_ui (u, v_digit) - mpz_srcptr u; - unsigned long int v_digit; -#endif -{ - mp_size_t usize = u->_mp_size; - - if (usize == 0) - return -(v_digit != 0); - - usize = ABS (usize); - - if (usize == 1) - { - mp_limb_t u_digit; - - u_digit = u->_mp_d[0]; - if (u_digit > v_digit) - return 1; - if (u_digit < v_digit) - return -1; - return 0; - } - - return 1; -} diff --git a/rts/gmp/mpz/com.c b/rts/gmp/mpz/com.c deleted file mode 100644 index 18d6427..0000000 --- a/rts/gmp/mpz/com.c +++ /dev/null @@ -1,93 +0,0 @@ -/* mpz_com(mpz_ptr dst, mpz_ptr src) -- Assign the bit-complemented value of - SRC to DST. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_com (mpz_ptr dst, mpz_srcptr src) -#else -mpz_com (dst, src) - mpz_ptr dst; - mpz_srcptr src; -#endif -{ - mp_size_t size = src->_mp_size; - mp_srcptr src_ptr; - mp_ptr dst_ptr; - - if (size >= 0) - { - /* As with infinite precision: one's complement, two's complement. - But this can be simplified using the identity -x = ~x + 1. - So we're going to compute (~~x) + 1 = x + 1! */ - - if (dst->_mp_alloc < size + 1) - _mpz_realloc (dst, size + 1); - - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; - - if (size == 0) - { - /* Special case, as mpn_add wants the first arg's size >= the - second arg's size. */ - dst_ptr[0] = 1; - dst->_mp_size = -1; - return; - } - - { - mp_limb_t cy; - - cy = mpn_add_1 (dst_ptr, src_ptr, size, (mp_limb_t) 1); - if (cy) - { - dst_ptr[size] = cy; - size++; - } - } - - /* Store a negative size, to indicate ones-extension. */ - dst->_mp_size = -size; - } - else - { - /* As with infinite precision: two's complement, then one's complement. - But that can be simplified using the identity -x = ~(x - 1). - So we're going to compute ~~(x - 1) = x - 1! */ - size = -size; - - if (dst->_mp_alloc < size) - _mpz_realloc (dst, size); - - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; - - mpn_sub_1 (dst_ptr, src_ptr, size, (mp_limb_t) 1); - size -= dst_ptr[size - 1] == 0; - - /* Store a positive size, to indicate zero-extension. */ - dst->_mp_size = size; - } -} diff --git a/rts/gmp/mpz/divexact.c b/rts/gmp/mpz/divexact.c deleted file mode 100644 index c297045..0000000 --- a/rts/gmp/mpz/divexact.c +++ /dev/null @@ -1,125 +0,0 @@ -/* mpz_divexact -- finds quotient when known that quot * den == num && den != 0. - -Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* Ken Weber (kweber@mat.ufrgs.br, kweber@mcs.kent.edu) - - Funding for this work has been partially provided by Conselho Nacional - de Desenvolvimento Cienti'fico e Tecnolo'gico (CNPq) do Brazil, Grant - 301314194-2, and was done while I was a visiting reseacher in the Instituto - de Matema'tica at Universidade Federal do Rio Grande do Sul (UFRGS). - - References: - T. Jebelean, An algorithm for exact division, Journal of Symbolic - Computation, v. 15, 1993, pp. 169-180. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_divexact (mpz_ptr quot, mpz_srcptr num, mpz_srcptr den) -#else -mpz_divexact (quot, num, den) - mpz_ptr quot; - mpz_srcptr num; - mpz_srcptr den; -#endif -{ - mp_ptr qp, tp; - mp_size_t qsize, tsize; - mp_srcptr np, dp; - mp_size_t nsize, dsize; - TMP_DECL (marker); - - nsize = ABS (num->_mp_size); - dsize = ABS (den->_mp_size); - - qsize = nsize - dsize + 1; - if (quot->_mp_alloc < qsize) - _mpz_realloc (quot, qsize); - - np = num->_mp_d; - dp = den->_mp_d; - qp = quot->_mp_d; - - if (nsize == 0) - { - if (dsize == 0) - DIVIDE_BY_ZERO; - quot->_mp_size = 0; - return; - } - - if (dsize <= 1) - { - if (dsize == 1) - { - mpn_divmod_1 (qp, np, nsize, dp[0]); - qsize -= qp[qsize - 1] == 0; - quot->_mp_size = (num->_mp_size ^ den->_mp_size) >= 0 ? qsize : -qsize; - return; - } - - /* Generate divide-by-zero error since dsize == 0. */ - DIVIDE_BY_ZERO; - } - - TMP_MARK (marker); - - /* QUOT <-- NUM/2^r, T <-- DEN/2^r where = r number of twos in DEN. */ - while (dp[0] == 0) - np += 1, nsize -= 1, dp += 1, dsize -= 1; - tsize = MIN (qsize, dsize); - if ((dp[0] & 1) != 0) - { - if (quot == den) /* QUOT and DEN overlap. */ - { - tp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB); - MPN_COPY (tp, dp, tsize); - } - else - tp = (mp_ptr) dp; - if (qp != np) - MPN_COPY_INCR (qp, np, qsize); - } - else - { - unsigned int r; - tp = (mp_ptr) TMP_ALLOC (tsize * BYTES_PER_MP_LIMB); - count_trailing_zeros (r, dp[0]); - mpn_rshift (tp, dp, tsize, r); - if (dsize > tsize) - tp[tsize - 1] |= dp[tsize] << (BITS_PER_MP_LIMB - r); - mpn_rshift (qp, np, qsize, r); - if (nsize > qsize) - qp[qsize - 1] |= np[qsize] << (BITS_PER_MP_LIMB - r); - } - - /* Now QUOT <-- QUOT/T. */ - mpn_bdivmod (qp, qp, qsize, tp, tsize, qsize * BITS_PER_MP_LIMB); - MPN_NORMALIZE (qp, qsize); - - quot->_mp_size = (num->_mp_size ^ den->_mp_size) >= 0 ? qsize : -qsize; - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/dump.c b/rts/gmp/mpz/dump.c deleted file mode 100644 index dc318ac..0000000 --- a/rts/gmp/mpz/dump.c +++ /dev/null @@ -1,44 +0,0 @@ -/* mpz_dump - Dump an integer 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 (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_dump (mpz_srcptr u) -#else -mpz_dump (u) - mpz_srcptr u; -#endif -{ - char *str; - - str = mpz_get_str (0, 10, u); - printf ("%s\n", str); - (*_mp_free_func) (str, 0);/* ??? broken alloc interface, pass what size ??? */ -} diff --git a/rts/gmp/mpz/fac_ui.c b/rts/gmp/mpz/fac_ui.c deleted file mode 100644 index 85f40f2..0000000 --- a/rts/gmp/mpz/fac_ui.c +++ /dev/null @@ -1,157 +0,0 @@ -/* mpz_fac_ui(result, n) -- Set RESULT to N!. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef DBG -#include -#endif - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_fac_ui (mpz_ptr result, unsigned long int n) -#else -mpz_fac_ui (result, n) - mpz_ptr result; - unsigned long int n; -#endif -{ -#if SIMPLE_FAC - - /* Be silly. Just multiply the numbers in ascending order. O(n**2). */ - - unsigned long int k; - - mpz_set_ui (result, 1L); - - for (k = 2; k <= n; k++) - mpz_mul_ui (result, result, k); -#else - - /* Be smarter. Multiply groups of numbers in ascending order until the - product doesn't fit in a limb. Multiply these partial product in a - balanced binary tree fashion, to make the operand have as equal sizes - as possible. When the operands have about the same size, mpn_mul - becomes faster. */ - - unsigned long int p, k; - mp_limb_t p1, p0; - - /* Stack of partial products, used to make the computation balanced - (i.e. make the sizes of the multiplication operands equal). The - topmost position of MP_STACK will contain a one-limb partial product, - the second topmost will contain a two-limb partial product, and so - on. MP_STACK[0] will contain a partial product with 2**t limbs. - To compute n! MP_STACK needs to be less than - log(n)**2/log(BITS_PER_MP_LIMB), so 30 is surely enough. */ -#define MP_STACK_SIZE 30 - mpz_t mp_stack[MP_STACK_SIZE]; - - /* TOP is an index into MP_STACK, giving the topmost element. - TOP_LIMIT_SO_FAR is the largets value it has taken so far. */ - int top, top_limit_so_far; - - /* Count of the total number of limbs put on MP_STACK so far. This - variable plays an essential role in making the compututation balanced. - See below. */ - unsigned int tree_cnt; - - top = top_limit_so_far = -1; - tree_cnt = 0; - p = 1; - for (k = 2; k <= n; k++) - { - /* Multiply the partial product in P with K. */ - umul_ppmm (p1, p0, (mp_limb_t) p, (mp_limb_t) k); - - /* Did we get overflow into the high limb, i.e. is the partial - product now more than one limb? */ - if (p1 != 0) - { - tree_cnt++; - - if (tree_cnt % 2 == 0) - { - mp_size_t i; - - /* TREE_CNT is even (i.e. we have generated an even number of - one-limb partial products), which means that we have a - single-limb product on the top of MP_STACK. */ - - mpz_mul_ui (mp_stack[top], mp_stack[top], p); - - /* If TREE_CNT is divisable by 4, 8,..., we have two - similar-sized partial products with 2, 4,... limbs at - the topmost two positions of MP_STACK. Multiply them - to form a new partial product with 4, 8,... limbs. */ - for (i = 4; (tree_cnt & (i - 1)) == 0; i <<= 1) - { - mpz_mul (mp_stack[top - 1], - mp_stack[top], mp_stack[top - 1]); - top--; - } - } - else - { - /* Put the single-limb partial product in P on the stack. - (The next time we get a single-limb product, we will - multiply the two together.) */ - top++; - if (top > top_limit_so_far) - { - if (top > MP_STACK_SIZE) - abort(); - /* The stack is now bigger than ever, initialize the top - element. */ - mpz_init_set_ui (mp_stack[top], p); - top_limit_so_far++; - } - else - mpz_set_ui (mp_stack[top], p); - } - - /* We ignored the last result from umul_ppmm. Put K in P as the - first component of the next single-limb partial product. */ - p = k; - } - else - /* We didn't get overflow in umul_ppmm. Put p0 in P and try - with one more value of K. */ - p = p0; /* bogus if long != mp_limb_t */ - } - - /* We have partial products in mp_stack[0..top], in descending order. - We also have a small partial product in p. - Their product is the final result. */ - if (top < 0) - mpz_set_ui (result, p); - else - mpz_mul_ui (result, mp_stack[top--], p); - while (top >= 0) - mpz_mul (result, result, mp_stack[top--]); - - /* Free the storage allocated for MP_STACK. */ - for (top = top_limit_so_far; top >= 0; top--) - mpz_clear (mp_stack[top]); -#endif -} diff --git a/rts/gmp/mpz/fdiv_q.c b/rts/gmp/mpz/fdiv_q.c deleted file mode 100644 index 9d75ca3..0000000 --- a/rts/gmp/mpz/fdiv_q.c +++ /dev/null @@ -1,51 +0,0 @@ -/* mpz_fdiv_q -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_q (mpz_ptr quot, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_q (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t dividend_size = dividend->_mp_size; - mp_size_t divisor_size = divisor->_mp_size; - mpz_t rem; - TMP_DECL (marker); - - TMP_MARK (marker); - - MPZ_TMP_INIT (rem, ABS (divisor_size)); - - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if ((divisor_size ^ dividend_size) < 0 && rem->_mp_size != 0) - mpz_sub_ui (quot, quot, 1L); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/fdiv_q_2exp.c b/rts/gmp/mpz/fdiv_q_2exp.c deleted file mode 100644 index 8e02180..0000000 --- a/rts/gmp/mpz/fdiv_q_2exp.c +++ /dev/null @@ -1,104 +0,0 @@ -/* mpz_fdiv_q_2exp -- Divide an integer by 2**CNT. Round the quotient - towards -infinity. - -Copyright (C) 1991, 1993, 1994, 1996, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_q_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_fdiv_q_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t wsize; - mp_size_t abs_usize = ABS (usize); - mp_size_t limb_cnt; - mp_ptr wp; - mp_limb_t round = 0; - - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = abs_usize - limb_cnt; - if (wsize <= 0) - { - wp = w->_mp_d; - wsize = 0; - /* Set ROUND since we know we skip some non-zero words in this case. - Well, if U is zero, we don't, but then this will be taken care of - below, since rounding only really takes place for negative U. */ - round = 1; - wp[0] = 1; - w->_mp_size = -(usize < 0); - return; - } - else - { - mp_size_t i; - mp_ptr up; - - /* Make sure there is enough space. We make an extra limb - here to account for possible rounding at the end. */ - if (w->_mp_alloc < wsize + 1) - _mpz_realloc (w, wsize + 1); - - wp = w->_mp_d; - up = u->_mp_d; - - /* Set ROUND if we are about skip some non-zero limbs. */ - for (i = 0; i < limb_cnt && round == 0; i++) - round = up[i]; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - round |= mpn_rshift (wp, up + limb_cnt, wsize, cnt); - wsize -= wp[wsize - 1] == 0; - } - else - { - MPN_COPY_INCR (wp, up + limb_cnt, wsize); - } - } - - if (usize < 0 && round != 0) - { - mp_limb_t cy; - if (wsize != 0) - { - cy = mpn_add_1 (wp, wp, wsize, (mp_limb_t) 1); - wp[wsize] = cy; - wsize += cy; - } - else - { - /* We shifted something negative to zero. The result is -1. */ - wp[0] = 1; - wsize = 1; - } - } - w->_mp_size = usize >= 0 ? wsize : -wsize; -} diff --git a/rts/gmp/mpz/fdiv_q_ui.c b/rts/gmp/mpz/fdiv_q_ui.c deleted file mode 100644 index 55d2498..0000000 --- a/rts/gmp/mpz/fdiv_q_ui.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mpz_fdiv_q_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - { - mpn_incr_u (quot_ptr, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/fdiv_qr.c b/rts/gmp/mpz/fdiv_qr.c deleted file mode 100644 index 06ce506..0000000 --- a/rts/gmp/mpz/fdiv_qr.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_fdiv_qr -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_qr (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mp_size_t xsize; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the quotient and - remainder have been preliminary calculated. We have to copy it to - temporary space if it's the same variable as either QUOT or REM. */ - if (quot == divisor || rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - xsize = dividend->_mp_size ^ divisor_size;; - mpz_tdiv_qr (quot, rem, dividend, divisor); - - if (xsize < 0 && rem->_mp_size != 0) - { - mpz_sub_ui (quot, quot, 1L); - mpz_add (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/fdiv_qr_ui.c b/rts/gmp/mpz/fdiv_qr_ui.c deleted file mode 100644 index 600c0da..0000000 --- a/rts/gmp/mpz/fdiv_qr_ui.c +++ /dev/null @@ -1,69 +0,0 @@ -/* mpz_fdiv_qr_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - { - mpn_incr_u (quot_ptr, (mp_limb_t) 1); - remainder_limb = divisor - remainder_limb; - } - - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = remainder_limb != 0; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/fdiv_r.c b/rts/gmp/mpz/fdiv_r.c deleted file mode 100644 index a365283..0000000 --- a/rts/gmp/mpz/fdiv_r.c +++ /dev/null @@ -1,58 +0,0 @@ -/* mpz_fdiv_r -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_r (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_fdiv_r (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if ((divisor_size ^ dividend->_mp_size) < 0 && rem->_mp_size != 0) - mpz_add (rem, rem, divisor); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/fdiv_r_2exp.c b/rts/gmp/mpz/fdiv_r_2exp.c deleted file mode 100644 index 081ce19..0000000 --- a/rts/gmp/mpz/fdiv_r_2exp.c +++ /dev/null @@ -1,156 +0,0 @@ -/* mpz_fdiv_r_2exp -- Divide a integer by 2**CNT and produce a remainder. - -Copyright (C) 1991, 1993, 1994, 1995, 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_fdiv_r_2exp (mpz_ptr res, mpz_srcptr in, unsigned long int cnt) -#else -mpz_fdiv_r_2exp (res, in, cnt) - mpz_ptr res; - mpz_srcptr in; - unsigned long int cnt; -#endif -{ - mp_size_t in_size = ABS (in->_mp_size); - mp_size_t res_size; - mp_size_t limb_cnt = cnt / BITS_PER_MP_LIMB; - mp_srcptr in_ptr = in->_mp_d; - - if (in_size > limb_cnt) - { - /* The input operand is (probably) greater than 2**CNT. */ - mp_limb_t x; - - x = in_ptr[limb_cnt] & (((mp_limb_t) 1 << cnt % BITS_PER_MP_LIMB) - 1); - if (x != 0) - { - res_size = limb_cnt + 1; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - res->_mp_d[limb_cnt] = x; - } - else - { - res_size = limb_cnt; - MPN_NORMALIZE (in_ptr, res_size); - - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - } - else - { - /* The input operand is smaller than 2**CNT. We perform a no-op, - apart from that we might need to copy IN to RES, and may need - to round the result. */ - res_size = in_size; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - - if (res != in) - MPN_COPY (res->_mp_d, in->_mp_d, limb_cnt); - in_size = in->_mp_size; - res->_mp_size = res_size; - if (in_size < 0 && res_size != 0) - { - /* Result should be 2^CNT - RES */ - mpz_t tmp; - TMP_DECL (marker); - TMP_MARK (marker); - MPZ_TMP_INIT (tmp, cnt/BITS_PER_MP_LIMB + 2); - mpz_set_ui (tmp, 1L); - mpz_mul_2exp (tmp, tmp, cnt); - mpz_sub (res, tmp, res); - TMP_FREE (marker); - } -} - -/* This is an alternative ending of the above function using just low-level - functions. Tested, but perhaps excessive? */ -#if 0 - if (in->_mp_size < 0 && res_size != 0) - { - /* Result should be 2^CNT - RES */ - - mp_ptr rp; - - limb_cnt = cnt / BITS_PER_MP_LIMB; - - if (res->_mp_alloc <= limb_cnt) - _mpz_realloc (res, limb_cnt + 1); - rp = PTR(res); - if (res_size > limb_cnt) - { - mpn_nz_neg (rp, rp, res_size); - rp[limb_cnt] &= ~(~(mp_limb_t) 0 << cnt % BITS_PER_MP_LIMB); - MPN_NORMALIZE_NOT_ZERO (rp, res_size); - } - else - { - mp_size_t i; - mpn_nz_neg (rp, rp, res_size); - for (i = res_size; i < limb_cnt; i++) - rp[i] = ~ (mp_limb_t) 0; - res_size = limb_cnt; - if (cnt % BITS_PER_MP_LIMB != 0) - { - rp[res_size] = ((mp_limb_t) 1 << (cnt % BITS_PER_MP_LIMB)) - 1; - res_size++; - } - else - MPN_NORMALIZE_NOT_ZERO (rp, res_size); - } - } - SIZ(res) = res_size; -} - -static void -mpn_nz_neg (rp, sp, n) - mp_ptr rp, sp; - mp_size_t n; -{ - mp_size_t i; - mp_limb_t x; - - x = sp[0]; - rp[0] = -x; - for (i = 1; x == 0; i++) - { - x = sp[i]; - rp[i] = -x; - } - - for (; i < n; i++) - { - rp[i] = ~sp[i]; - } -} -#endif diff --git a/rts/gmp/mpz/fdiv_r_ui.c b/rts/gmp/mpz/fdiv_r_ui.c deleted file mode 100644 index dd5c743..0000000 --- a/rts/gmp/mpz/fdiv_r_ui.c +++ /dev/null @@ -1,55 +0,0 @@ -/* mpz_fdiv_r_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - remainder_limb = divisor - remainder_limb; - - rem->_mp_d[0] = remainder_limb; - rem->_mp_size = remainder_limb != 0; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/fdiv_ui.c b/rts/gmp/mpz/fdiv_ui.c deleted file mode 100644 index f937b5f..0000000 --- a/rts/gmp/mpz/fdiv_ui.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_fdiv_ui -- Division rounding the quotient towards -infinity. - The remainder gets the same sign as the denominator. - -Copyright (C) 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_fdiv_ui (mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_fdiv_ui (dividend, divisor) - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb != 0 && dividend_size < 0) - remainder_limb = divisor - remainder_limb; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/fib_ui.c b/rts/gmp/mpz/fib_ui.c deleted file mode 100644 index 4bebb80..0000000 --- a/rts/gmp/mpz/fib_ui.c +++ /dev/null @@ -1,165 +0,0 @@ -/* mpz_fib_ui(result, n) -- Set RESULT to the Nth Fibonacci number. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -/* This is fast, but could be made somewhat faster and neater. - The timing is somewhat fluctuating for even/odd sizes because - of the extra hair used to save variables and operations. Here - are a few things one might want to address: - 1. Avoid using 4 intermediate variables in mpz_fib_bigcase. - 2. Call mpn functions directly. Straightforward for these functions. - 3. Merge the three functions into one. - -Said by Kevin: - Consider using the Lucas numbers L[n] as an auxiliary sequence, making - it possible to do the "doubling" operation in mpz_fib_bigcase with two - squares rather than two multiplies. The formulas are a little more - complicated, something like the following (untested). - - F[2n] = ((F[n]+L[n])^2 - 6*F[n]^2 - 4*(-1)^n) / 2 - L[2n] = 5*F[n]^2 + 2*(-1)^n - - F[2n+1] = (F[2n] + L[2n]) / 2 - L[2n+1] = (5*F[2n] + L[2n]) / 2 - - The Lucas number that comes for free here could even be returned. - - Maybe there's formulas with two squares using just F[n], but I don't - know of any. -*/ - -/* Determine the needed storage for Fib(n). */ -#define FIB_SIZE(n) (((mp_size_t) ((n)*0.695)) / BITS_PER_MP_LIMB + 2) - -static void mpz_fib_bigcase _PROTO ((mpz_t, mpz_t, unsigned long int)); -static void mpz_fib_basecase _PROTO ((mpz_t, mpz_t, unsigned long int)); - - -#ifndef FIB_THRESHOLD -#define FIB_THRESHOLD 60 -#endif - -void -#if __STDC__ -mpz_fib_ui (mpz_t r, unsigned long int n) -#else -mpz_fib_ui (r, n) - mpz_t r; - unsigned long int n; -#endif -{ - if (n == 0) - mpz_set_ui (r, 0); - else - { - mpz_t t1; - mpz_init (t1); - if (n < FIB_THRESHOLD) - mpz_fib_basecase (t1, r, n); - else - mpz_fib_bigcase (t1, r, n); - mpz_clear (t1); - } -} - -static void -#if __STDC__ -mpz_fib_basecase (mpz_t t1, mpz_t t2, unsigned long int n) -#else -mpz_fib_basecase (t1, t2, n) - mpz_t t1; - mpz_t t2; - unsigned long int n; -#endif -{ - unsigned long int m, i; - - mpz_set_ui (t1, 0); - mpz_set_ui (t2, 1); - m = n/2; - for (i = 0; i < m; i++) - { - mpz_add (t1, t1, t2); - mpz_add (t2, t1, t2); - } - if ((n & 1) == 0) - { - mpz_sub (t1, t2, t1); - mpz_sub (t2, t2, t1); /* trick: recover t1 value just overwritten */ - } -} - -static void -#if __STDC__ -mpz_fib_bigcase (mpz_t t1, mpz_t t2, unsigned long int n) -#else -mpz_fib_bigcase (t1, t2, n) - mpz_t t1; - mpz_t t2; - unsigned long int n; -#endif -{ - unsigned long int n2; - int ni, i; - mpz_t x1, x2, u1, u2; - - ni = 0; - for (n2 = n; n2 >= FIB_THRESHOLD; n2 /= 2) - ni++; - - mpz_fib_basecase (t1, t2, n2); - - mpz_init (x1); - mpz_init (x2); - mpz_init (u1); - mpz_init (u2); - - for (i = ni - 1; i >= 0; i--) - { - mpz_mul_2exp (x1, t1, 1); - mpz_mul_2exp (x2, t2, 1); - - mpz_add (x1, x1, t2); - mpz_sub (x2, x2, t1); - - mpz_mul (u1, t2, x1); - mpz_mul (u2, t1, x2); - - if (((n >> i) & 1) == 0) - { - mpz_sub (t1, u1, u2); - mpz_set (t2, u1); - } - else - { - mpz_set (t1, u1); - mpz_mul_2exp (t2, u1, 1); - mpz_sub (t2, t2, u2); - } - } - - mpz_clear (x1); - mpz_clear (x2); - mpz_clear (u1); - mpz_clear (u2); -} diff --git a/rts/gmp/mpz/fits_sint_p.c b/rts/gmp/mpz/fits_sint_p.c deleted file mode 100644 index 82e32a2..0000000 --- a/rts/gmp/mpz/fits_sint_p.c +++ /dev/null @@ -1,50 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_sint_p (mpz_srcptr src) -#else -mpz_fits_sint_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size > 0) - { - if (size > 1) - return 0; - return mpl < ~((~(unsigned int) 0) >> 1); - } - else - { - if (size < -1) - return 0; - return mpl <= ~((~(unsigned int) 0) >> 1); - } -} diff --git a/rts/gmp/mpz/fits_slong_p.c b/rts/gmp/mpz/fits_slong_p.c deleted file mode 100644 index e0669b5..0000000 --- a/rts/gmp/mpz/fits_slong_p.c +++ /dev/null @@ -1,50 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_slong_p (mpz_srcptr src) -#else -mpz_fits_slong_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size > 0) - { - if (size > 1) - return 0; - return mpl < ~((~(unsigned long int) 0) >> 1); - } - else - { - if (size < -1) - return 0; - return mpl <= ~((~(unsigned long int) 0) >> 1); - } -} diff --git a/rts/gmp/mpz/fits_sshort_p.c b/rts/gmp/mpz/fits_sshort_p.c deleted file mode 100644 index 5b8e31a..0000000 --- a/rts/gmp/mpz/fits_sshort_p.c +++ /dev/null @@ -1,50 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_sshort_p (mpz_srcptr src) -#else -mpz_fits_sshort_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size > 0) - { - if (size > 1) - return 0; - return mpl <= (((unsigned short int) ~(unsigned int) 0) >> 1); - } - else - { - if (size < -1) - return 0; - return mpl <= (((unsigned short int) ~(unsigned int) 0) >> 1) + 1; - } -} diff --git a/rts/gmp/mpz/fits_uint_p.c b/rts/gmp/mpz/fits_uint_p.c deleted file mode 100644 index 72f62fa..0000000 --- a/rts/gmp/mpz/fits_uint_p.c +++ /dev/null @@ -1,41 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_uint_p (mpz_srcptr src) -#else -mpz_fits_uint_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size < 0 || size > 1) - return 0; - return mpl <= (~(unsigned int) 0); -} diff --git a/rts/gmp/mpz/fits_ulong_p.c b/rts/gmp/mpz/fits_ulong_p.c deleted file mode 100644 index 92eb42e..0000000 --- a/rts/gmp/mpz/fits_ulong_p.c +++ /dev/null @@ -1,41 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_ulong_p (mpz_srcptr src) -#else -mpz_fits_ulong_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size < 0 || size > 1) - return 0; - return mpl <= (~(unsigned long int) 0); -} diff --git a/rts/gmp/mpz/fits_ushort_p.c b/rts/gmp/mpz/fits_ushort_p.c deleted file mode 100644 index bde0eda..0000000 --- a/rts/gmp/mpz/fits_ushort_p.c +++ /dev/null @@ -1,41 +0,0 @@ -/* int mpz_fits_X_p (mpz_t src) -- Return whether src fits the C type X. - -Copyright (C) 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_fits_ushort_p (mpz_srcptr src) -#else -mpz_fits_ushort_p (src) - mpz_srcptr src; -#endif -{ - mp_size_t size; - mp_limb_t mpl; - - mpl = PTR(src)[0]; - size = SIZ(src); - if (size < 0 || size > 1) - return 0; - return mpl <= ((unsigned short int) ~(unsigned int) 0); -} diff --git a/rts/gmp/mpz/gcd.c b/rts/gmp/mpz/gcd.c deleted file mode 100644 index 0d950dd..0000000 --- a/rts/gmp/mpz/gcd.c +++ /dev/null @@ -1,180 +0,0 @@ -/* mpz/gcd.c: Calculate the greatest common divisor of two integers. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_gcd (mpz_ptr g, mpz_srcptr u, mpz_srcptr v) -#else -mpz_gcd (g, u, v) - mpz_ptr g; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -gcd (mpz_srcptr u, mpz_srcptr v, mpz_ptr g) -#else -gcd (u, v, g) - mpz_ptr g; - mpz_srcptr u; - mpz_srcptr v; -#endif -#endif /* BERKELEY_MP */ - -{ - unsigned long int g_zero_bits, u_zero_bits, v_zero_bits; - mp_size_t g_zero_limbs, u_zero_limbs, v_zero_limbs; - mp_ptr tp; - mp_ptr up = u->_mp_d; - mp_size_t usize = ABS (u->_mp_size); - mp_ptr vp = v->_mp_d; - mp_size_t vsize = ABS (v->_mp_size); - mp_size_t gsize; - TMP_DECL (marker); - - /* GCD(0, V) == V. */ - if (usize == 0) - { - g->_mp_size = vsize; - if (g == v) - return; - if (g->_mp_alloc < vsize) - _mpz_realloc (g, vsize); - MPN_COPY (g->_mp_d, vp, vsize); - return; - } - - /* GCD(U, 0) == U. */ - if (vsize == 0) - { - g->_mp_size = usize; - if (g == u) - return; - if (g->_mp_alloc < usize) - _mpz_realloc (g, usize); - MPN_COPY (g->_mp_d, up, usize); - return; - } - - if (usize == 1) - { - g->_mp_size = 1; - g->_mp_d[0] = mpn_gcd_1 (vp, vsize, up[0]); - return; - } - - if (vsize == 1) - { - g->_mp_size = 1; - g->_mp_d[0] = mpn_gcd_1 (up, usize, vp[0]); - return; - } - - TMP_MARK (marker); - - /* Eliminate low zero bits from U and V and move to temporary storage. */ - while (*up == 0) - up++; - u_zero_limbs = up - u->_mp_d; - usize -= u_zero_limbs; - count_trailing_zeros (u_zero_bits, *up); - tp = up; - up = (mp_ptr) TMP_ALLOC (usize * BYTES_PER_MP_LIMB); - if (u_zero_bits != 0) - { - mpn_rshift (up, tp, usize, u_zero_bits); - usize -= up[usize - 1] == 0; - } - else - MPN_COPY (up, tp, usize); - - while (*vp == 0) - vp++; - v_zero_limbs = vp - v->_mp_d; - vsize -= v_zero_limbs; - count_trailing_zeros (v_zero_bits, *vp); - tp = vp; - vp = (mp_ptr) TMP_ALLOC (vsize * BYTES_PER_MP_LIMB); - if (v_zero_bits != 0) - { - mpn_rshift (vp, tp, vsize, v_zero_bits); - vsize -= vp[vsize - 1] == 0; - } - else - MPN_COPY (vp, tp, vsize); - - if (u_zero_limbs > v_zero_limbs) - { - g_zero_limbs = v_zero_limbs; - g_zero_bits = v_zero_bits; - } - else if (u_zero_limbs < v_zero_limbs) - { - g_zero_limbs = u_zero_limbs; - g_zero_bits = u_zero_bits; - } - else /* Equal. */ - { - g_zero_limbs = u_zero_limbs; - g_zero_bits = MIN (u_zero_bits, v_zero_bits); - } - - /* Call mpn_gcd. The 2nd argument must not have more bits than the 1st. */ - vsize = (usize < vsize || (usize == vsize && up[usize-1] < vp[vsize-1])) - ? mpn_gcd (vp, vp, vsize, up, usize) - : mpn_gcd (vp, up, usize, vp, vsize); - - /* Here G <-- V << (g_zero_limbs*BITS_PER_MP_LIMB + g_zero_bits). */ - gsize = vsize + g_zero_limbs; - if (g_zero_bits != 0) - { - mp_limb_t cy_limb; - gsize += (vp[vsize - 1] >> (BITS_PER_MP_LIMB - g_zero_bits)) != 0; - if (g->_mp_alloc < gsize) - _mpz_realloc (g, gsize); - MPN_ZERO (g->_mp_d, g_zero_limbs); - - tp = g->_mp_d + g_zero_limbs; - cy_limb = mpn_lshift (tp, vp, vsize, g_zero_bits); - if (cy_limb != 0) - tp[vsize] = cy_limb; - } - else - { - if (g->_mp_alloc < gsize) - _mpz_realloc (g, gsize); - MPN_ZERO (g->_mp_d, g_zero_limbs); - MPN_COPY (g->_mp_d + g_zero_limbs, vp, vsize); - } - - g->_mp_size = gsize; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/gcd_ui.c b/rts/gmp/mpz/gcd_ui.c deleted file mode 100644 index f3bec58..0000000 --- a/rts/gmp/mpz/gcd_ui.c +++ /dev/null @@ -1,65 +0,0 @@ -/* mpz_gcd_ui -- Calculate the greatest common divisior of two integers. - -Copyright (C) 1994, 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_gcd_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_gcd_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_size_t size; - mp_limb_t res; - - size = ABS (u->_mp_size); - - if (size == 0) - res = v; - else if (v == 0) - { - if (w != NULL && u != w) - { - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - MPN_COPY (w->_mp_d, u->_mp_d, size); - } - w->_mp_size = size; - /* We can't return any useful result for gcd(big,0). */ - return size > 1 ? 0 : w->_mp_d[0]; - } - else - res = mpn_gcd_1 (u->_mp_d, size, (mp_limb_t) v); - - if (w != NULL) - { - w->_mp_d[0] = res; - w->_mp_size = 1; - } - return res; -} diff --git a/rts/gmp/mpz/gcdext.c b/rts/gmp/mpz/gcdext.c deleted file mode 100644 index 3ba04c8..0000000 --- a/rts/gmp/mpz/gcdext.c +++ /dev/null @@ -1,137 +0,0 @@ -/* mpz_gcdext(g, s, t, a, b) -- Set G to gcd(a, b), and S and T such that - g = as + bt. - -Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_gcdext (mpz_ptr g, mpz_ptr s, mpz_ptr t, mpz_srcptr a, mpz_srcptr b) -#else -mpz_gcdext (g, s, t, a, b) - mpz_ptr g; - mpz_ptr s; - mpz_ptr t; - mpz_srcptr a; - mpz_srcptr b; -#endif -{ - mp_size_t asize, bsize, usize, vsize; - mp_srcptr ap, bp; - mp_ptr up, vp; - mp_size_t gsize, ssize, tmp_ssize; - mp_ptr gp, sp, tmp_gp, tmp_sp; - mpz_srcptr u, v; - mpz_ptr ss, tt; - __mpz_struct stmp, gtmp; - TMP_DECL (marker); - - TMP_MARK (marker); - - /* mpn_gcdext requires that U >= V. Therefore, we often have to swap U and - V. This in turn leads to a lot of complications. The computed cofactor - will be the wrong one, so we have to fix that up at the end. */ - - asize = ABS (SIZ (a)); - bsize = ABS (SIZ (b)); - ap = PTR (a); - bp = PTR (b); - if (asize > bsize || (asize == bsize && mpn_cmp (ap, bp, asize) > 0)) - { - usize = asize; - vsize = bsize; - up = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB); - vp = (mp_ptr) TMP_ALLOC ((vsize + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (up, ap, usize); - MPN_COPY (vp, bp, vsize); - u = a; - v = b; - ss = s; - tt = t; - } - else - { - usize = bsize; - vsize = asize; - up = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB); - vp = (mp_ptr) TMP_ALLOC ((vsize + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (up, bp, usize); - MPN_COPY (vp, ap, vsize); - u = b; - v = a; - ss = t; - tt = s; - } - - tmp_gp = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB); - tmp_sp = (mp_ptr) TMP_ALLOC ((usize + 1) * BYTES_PER_MP_LIMB); - - if (vsize == 0) - { - tmp_sp[0] = 1; - tmp_ssize = 1; - MPN_COPY (tmp_gp, up, usize); - gsize = usize; - } - else - gsize = mpn_gcdext (tmp_gp, tmp_sp, &tmp_ssize, up, usize, vp, vsize); - ssize = ABS (tmp_ssize); - - PTR (>mp) = tmp_gp; - SIZ (>mp) = gsize; - - PTR (&stmp) = tmp_sp; - SIZ (&stmp) = (tmp_ssize ^ SIZ (u)) >= 0 ? ssize : -ssize; - - if (tt != NULL) - { - if (SIZ (v) == 0) - SIZ (tt) = 0; - else - { - mpz_t x; - MPZ_TMP_INIT (x, ssize + usize + 1); - mpz_mul (x, &stmp, u); - mpz_sub (x, >mp, x); - mpz_tdiv_q (tt, x, v); - } - } - - if (ss != NULL) - { - if (ALLOC (ss) < ssize) - _mpz_realloc (ss, ssize); - sp = PTR (ss); - MPN_COPY (sp, tmp_sp, ssize); - SIZ (ss) = SIZ (&stmp); - } - - if (ALLOC (g) < gsize) - _mpz_realloc (g, gsize); - gp = PTR (g); - MPN_COPY (gp, tmp_gp, gsize); - SIZ (g) = gsize; - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/get_d.c b/rts/gmp/mpz/get_d.c deleted file mode 100644 index 6a7c585..0000000 --- a/rts/gmp/mpz/get_d.c +++ /dev/null @@ -1,128 +0,0 @@ -/* double mpz_get_d (mpz_t src) -- Return the double approximation to SRC. - -Copyright (C) 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -static int -#if __STDC__ -mpn_zero_p (mp_ptr p, mp_size_t n) -#else -mpn_zero_p (p, n) - mp_ptr p; - mp_size_t n; -#endif -{ - mp_size_t i; - - for (i = 0; i < n; i++) - { - if (p[i] != 0) - return 0; - } - - return 1; -} - - -double -#if __STDC__ -mpz_get_d (mpz_srcptr src) -#else -mpz_get_d (src) - mpz_srcptr src; -#endif -{ - double res; - mp_size_t size; - int negative; - mp_ptr qp; - mp_limb_t hz, lz; - int cnt; - - size = SIZ(src); - if (size == 0) - return 0.0; - - negative = size < 0; - size = ABS (size); - qp = PTR(src); - - if (size == 1) - { - res = qp[size - 1]; - } - else if (size == 2) - { - res = MP_BASE_AS_DOUBLE * qp[size - 1] + qp[size - 2]; - } - else - { - count_leading_zeros (cnt, qp[size - 1]); - -#if BITS_PER_MP_LIMB == 32 - if (cnt == 0) - { - hz = qp[size - 1]; - lz = qp[size - 2]; - } - else - { - hz = (qp[size - 1] << cnt) | (qp[size - 2] >> BITS_PER_MP_LIMB - cnt); - lz = (qp[size - 2] << cnt) | (qp[size - 3] >> BITS_PER_MP_LIMB - cnt); - } -#if _GMP_IEEE_FLOATS - /* Take bits from less significant limbs, but only if they may affect - the result. */ - if ((lz & 0x7ff) == 0x400) - { - if (cnt != 0) - lz += ((qp[size - 3] << cnt) != 0 || ! mpn_zero_p (qp, size - 3)); - else - lz += (! mpn_zero_p (qp, size - 2)); - } -#endif - res = MP_BASE_AS_DOUBLE * hz + lz; - res = __gmp_scale2 (res, (size - 2) * BITS_PER_MP_LIMB - cnt); -#endif -#if BITS_PER_MP_LIMB == 64 - if (cnt == 0) - hz = qp[size - 1]; - else - hz = (qp[size - 1] << cnt) | (qp[size - 2] >> BITS_PER_MP_LIMB - cnt); -#if _GMP_IEEE_FLOATS - if ((hz & 0x7ff) == 0x400) - { - if (cnt != 0) - hz += ((qp[size - 2] << cnt) != 0 || ! mpn_zero_p (qp, size - 2)); - else - hz += (! mpn_zero_p (qp, size - 1)); - } -#endif - res = hz; - res = __gmp_scale2 (res, (size - 1) * BITS_PER_MP_LIMB - cnt); -#endif - } - - return negative ? -res : res; -} diff --git a/rts/gmp/mpz/get_si.c b/rts/gmp/mpz/get_si.c deleted file mode 100644 index 8a5d0e4..0000000 --- a/rts/gmp/mpz/get_si.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpz_get_si(integer) -- Return the least significant digit from INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -signed long int -#if __STDC__ -mpz_get_si (mpz_srcptr op) -#else -mpz_get_si (op) - mpz_srcptr op; -#endif -{ - mp_size_t size = op->_mp_size; - mp_limb_t low_limb = op->_mp_d[0]; - - if (size > 0) - return low_limb % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1)); - else if (size < 0) - /* This convoluted expression is necessary to properly handle 0x80000000 */ - return ~((low_limb - 1) % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1))); - else - return 0; -} diff --git a/rts/gmp/mpz/get_str.c b/rts/gmp/mpz/get_str.c deleted file mode 100644 index c7278af..0000000 --- a/rts/gmp/mpz/get_str.c +++ /dev/null @@ -1,118 +0,0 @@ -/* mpz_get_str (string, base, mp_src) -- Convert the multiple precision - number MP_SRC to a string STRING of base BASE. If STRING is NULL - allocate space for the result. In any case, return a pointer to the - result. If STRING is not NULL, the caller must ensure enough space is - available to store the result. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -char * -#if __STDC__ -mpz_get_str (char *res_str, int base, mpz_srcptr x) -#else -mpz_get_str (res_str, base, x) - char *res_str; - int base; - mpz_srcptr x; -#endif -{ - mp_ptr xp; - mp_size_t x_size = x->_mp_size; - unsigned char *str; - char *return_str; - size_t str_size; - char *num_to_text; - int i; - TMP_DECL (marker); - - TMP_MARK (marker); - if (base >= 0) - { - if (base == 0) - base = 10; - num_to_text = "0123456789abcdefghijklmnopqrstuvwxyz"; - } - else - { - base = -base; - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } - - /* We allways allocate space for the string. If the caller passed a - NULL pointer for RES_STR, we allocate permanent space and return - a pointer to that to the caller. */ - str_size = ((size_t) (ABS (x_size) * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly)) + 3; - if (res_str == 0) - { - /* We didn't get a string from the user. Allocate one (and return - a pointer to it). */ - res_str = (char *) (*_mp_allocate_func) (str_size); - /* Make str, the variable used for raw result from mpn_get_str, - point to the same string, but just after a possible minus sign. */ - str = (unsigned char *) res_str + 1; - } - else - { - /* Use TMP_ALLOC to get temporary space, since we need a few extra bytes - that we can't expect to caller to supply us with. */ - str = (unsigned char *) TMP_ALLOC (str_size); - } - - return_str = res_str; - - if (x_size == 0) - { - res_str[0] = '0'; - res_str[1] = 0; - TMP_FREE (marker); - return res_str; - } - if (x_size < 0) - { - *res_str++ = '-'; - x_size = -x_size; - } - - /* Move the number to convert into temporary space, since mpn_get_str - clobbers its argument + needs one extra high limb.... */ - xp = (mp_ptr) TMP_ALLOC ((x_size + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (xp, x->_mp_d, x_size); - - str_size = mpn_get_str (str, base, xp, x_size); - - /* mpn_get_str might make some leading zeros. Skip them. */ - while (*str == 0) - { - str_size--; - str++; - } - - /* Translate result to printable chars and move result to RES_STR. */ - for (i = 0; i < str_size; i++) - res_str[i] = num_to_text[str[i]]; - res_str[str_size] = 0; - - TMP_FREE (marker); - return return_str; -} diff --git a/rts/gmp/mpz/get_ui.c b/rts/gmp/mpz/get_ui.c deleted file mode 100644 index a8ec9e0..0000000 --- a/rts/gmp/mpz/get_ui.c +++ /dev/null @@ -1,37 +0,0 @@ -/* mpz_get_ui(integer) -- Return the least significant digit from INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_get_ui (mpz_srcptr integer) -#else -mpz_get_ui (integer) - mpz_srcptr integer; -#endif -{ - if (integer->_mp_size == 0) - return 0; - else - return integer->_mp_d[0]; -} diff --git a/rts/gmp/mpz/getlimbn.c b/rts/gmp/mpz/getlimbn.c deleted file mode 100644 index b772ed0..0000000 --- a/rts/gmp/mpz/getlimbn.c +++ /dev/null @@ -1,38 +0,0 @@ -/* mpz_getlimbn(integer,n) -- Return the N:th limb from INTEGER. - -Copyright (C) 1993, 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -mp_limb_t -#if __STDC__ -mpz_getlimbn (mpz_srcptr integer, mp_size_t n) -#else -mpz_getlimbn (integer, n) - mpz_srcptr integer; - mp_size_t n; -#endif -{ - if (ABS (integer->_mp_size) <= n || n < 0) - return 0; - else - return integer->_mp_d[n]; -} diff --git a/rts/gmp/mpz/hamdist.c b/rts/gmp/mpz/hamdist.c deleted file mode 100644 index b039a65..0000000 --- a/rts/gmp/mpz/hamdist.c +++ /dev/null @@ -1,62 +0,0 @@ -/* mpz_hamdist(mpz_ptr op1, mpz_ptr op2) -- Compute the hamming distance - between OP1 and OP2. If one of the operands is negative, return ~0. (We - could make the function well-defined when both operands are negative, but - that would probably not be worth the trouble. - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_hamdist (mpz_srcptr u, mpz_srcptr v) -#else -mpz_hamdist (u, v) - mpz_srcptr u; - mpz_srcptr v; -#endif -{ - mp_srcptr up, vp; - mp_size_t usize, vsize, size; - unsigned long int count; - - usize = u->_mp_size; - vsize = v->_mp_size; - - if ((usize | vsize) < 0) - return ~ (unsigned long int) 0; - - up = u->_mp_d; - vp = v->_mp_d; - - if (usize > vsize) - { - count = mpn_popcount (up + vsize, usize - vsize); - size = vsize; - } - else - { - count = mpn_popcount (vp + usize, vsize - usize); - size = usize; - } - - return count + mpn_hamdist (up, vp, size); -} diff --git a/rts/gmp/mpz/init.c b/rts/gmp/mpz/init.c deleted file mode 100644 index 2e8e4d2..0000000 --- a/rts/gmp/mpz/init.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpz_init() -- Make a new multiple precision number with value 0. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init (mpz_ptr x) -#else -mpz_init (x) - mpz_ptr x; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - x->_mp_size = 0; -} diff --git a/rts/gmp/mpz/inp_raw.c b/rts/gmp/mpz/inp_raw.c deleted file mode 100644 index 15e6012..0000000 --- a/rts/gmp/mpz/inp_raw.c +++ /dev/null @@ -1,101 +0,0 @@ -/* mpz_inp_raw -- Input a mpz_t in raw, but endianess, and wordsize - independent format (as output by mpz_out_raw). - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_inp_raw (mpz_ptr x, FILE *stream) -#else -mpz_inp_raw (x, stream) - mpz_ptr x; - FILE *stream; -#endif -{ - int i; - mp_size_t s; - mp_size_t xsize; - mp_ptr xp; - unsigned int c; - mp_limb_t x_limb; - mp_size_t in_bytesize; - int neg_flag; - - if (stream == 0) - stream = stdin; - - /* Read 4-byte size */ - in_bytesize = 0; - for (i = 4 - 1; i >= 0; i--) - { - c = fgetc (stream); - in_bytesize = (in_bytesize << BITS_PER_CHAR) | c; - } - - /* Size is stored as a 32 bit word; sign extend in_bytesize for non-32 bit - machines. */ - if (sizeof (mp_size_t) > 4) - in_bytesize |= (-(in_bytesize < 0)) << 31; - - neg_flag = in_bytesize < 0; - in_bytesize = ABS (in_bytesize); - xsize = (in_bytesize + BYTES_PER_MP_LIMB - 1) / BYTES_PER_MP_LIMB; - - if (xsize == 0) - { - x->_mp_size = 0; - return 4; /* we've read 4 bytes */ - } - - if (x->_mp_alloc < xsize) - _mpz_realloc (x, xsize); - xp = x->_mp_d; - - x_limb = 0; - for (i = (in_bytesize - 1) % BYTES_PER_MP_LIMB; i >= 0; i--) - { - c = fgetc (stream); - x_limb = (x_limb << BITS_PER_CHAR) | c; - } - xp[xsize - 1] = x_limb; - - for (s = xsize - 2; s >= 0; s--) - { - x_limb = 0; - for (i = BYTES_PER_MP_LIMB - 1; i >= 0; i--) - { - c = fgetc (stream); - x_limb = (x_limb << BITS_PER_CHAR) | c; - } - xp[s] = x_limb; - } - - if (c == EOF) - return 0; /* error */ - - MPN_NORMALIZE (xp, xsize); - x->_mp_size = neg_flag ? -xsize : xsize; - return in_bytesize + 4; -} diff --git a/rts/gmp/mpz/inp_str.c b/rts/gmp/mpz/inp_str.c deleted file mode 100644 index 7aa5e1f..0000000 --- a/rts/gmp/mpz/inp_str.c +++ /dev/null @@ -1,167 +0,0 @@ -/* mpz_inp_str(dest_integer, stream, base) -- Input a number in base - BASE from stdio stream STREAM and store the result in DEST_INTEGER. - -Copyright (C) 1991, 1993, 1994, 1996, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include -#include -#include "gmp.h" -#include "gmp-impl.h" - -static int -#if __STDC__ -digit_value_in_base (int c, int base) -#else -digit_value_in_base (c, base) - int c; - int base; -#endif -{ - int digit; - - if (isdigit (c)) - digit = c - '0'; - else if (islower (c)) - digit = c - 'a' + 10; - else if (isupper (c)) - digit = c - 'A' + 10; - else - return -1; - - if (digit < base) - return digit; - return -1; -} - -size_t -#if __STDC__ -mpz_inp_str (mpz_ptr x, FILE *stream, int base) -#else -mpz_inp_str (x, stream, base) - mpz_ptr x; - FILE *stream; - int base; -#endif -{ - char *str; - size_t alloc_size, str_size; - int c; - int negative; - mp_size_t xsize; - size_t nread; - - if (stream == 0) - stream = stdin; - - nread = 0; - - /* Skip whitespace. */ - do - { - c = getc (stream); - nread++; - } - while (isspace (c)); - - negative = 0; - if (c == '-') - { - negative = 1; - c = getc (stream); - nread++; - } - - if (digit_value_in_base (c, base == 0 ? 10 : base) < 0) - return 0; /* error if no digits */ - - /* If BASE is 0, try to find out the base by looking at the initial - characters. */ - if (base == 0) - { - base = 10; - if (c == '0') - { - base = 8; - c = getc (stream); - nread++; - if (c == 'x' || c == 'X') - { - base = 16; - c = getc (stream); - nread++; - } - else if (c == 'b' || c == 'B') - { - base = 2; - c = getc (stream); - nread++; - } - } - } - - /* Skip leading zeros. */ - while (c == '0') - { - c = getc (stream); - nread++; - } - - alloc_size = 100; - str = (char *) (*_mp_allocate_func) (alloc_size); - str_size = 0; - - for (;;) - { - int dig; - if (str_size >= alloc_size) - { - size_t old_alloc_size = alloc_size; - alloc_size = alloc_size * 3 / 2; - str = (char *) (*_mp_reallocate_func) (str, old_alloc_size, alloc_size); - } - dig = digit_value_in_base (c, base); - if (dig < 0) - break; - str[str_size++] = dig; - c = getc (stream); - } - - ungetc (c, stream); - - /* Make sure the string is not empty, mpn_set_str would fail. */ - if (str_size == 0) - { - x->_mp_size = 0; - (*_mp_free_func) (str, alloc_size); - return nread; - } - - xsize = (((mp_size_t) (str_size / __mp_bases[base].chars_per_bit_exactly)) - / BITS_PER_MP_LIMB + 2); - if (x->_mp_alloc < xsize) - _mpz_realloc (x, xsize); - - /* Convert the byte array in base BASE to our bignum format. */ - xsize = mpn_set_str (x->_mp_d, (unsigned char *) str, str_size, base); - x->_mp_size = negative ? -xsize : xsize; - - (*_mp_free_func) (str, alloc_size); - return str_size + nread; -} diff --git a/rts/gmp/mpz/invert.c b/rts/gmp/mpz/invert.c deleted file mode 100644 index 749a096..0000000 --- a/rts/gmp/mpz/invert.c +++ /dev/null @@ -1,77 +0,0 @@ -/* mpz_invert (inv, x, n). Find multiplicative inverse of X in Z(N). - If X has an inverse, return non-zero and store inverse in INVERSE, - otherwise, return 0 and put garbage in INVERSE. - -Copyright (C) 1996, 1997, 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_invert (mpz_ptr inverse, mpz_srcptr x, mpz_srcptr n) -#else -mpz_invert (inverse, x, n) - mpz_ptr inverse; - mpz_srcptr x, n; -#endif -{ - mpz_t gcd, tmp; - mp_size_t xsize, nsize, size; - TMP_DECL (marker); - - xsize = SIZ (x); - nsize = SIZ (n); - xsize = ABS (xsize); - nsize = ABS (nsize); - size = MAX (xsize, nsize) + 1; - - /* No inverse exists if the leftside operand is 0. Likewise, no - inverse exists if the mod operand is 1. */ - if (xsize == 0 || (nsize == 1 && (PTR (n))[0] == 1)) - return 0; - - TMP_MARK (marker); - - MPZ_TMP_INIT (gcd, size); - MPZ_TMP_INIT (tmp, size); - mpz_gcdext (gcd, tmp, (mpz_ptr) 0, x, n); - - /* If no inverse existed, return with an indication of that. */ - if (gcd->_mp_size != 1 || (gcd->_mp_d)[0] != 1) - { - TMP_FREE (marker); - return 0; - } - - /* Make sure we return a positive inverse. */ - if (SIZ (tmp) < 0) - { - if (SIZ (n) < 0) - mpz_sub (inverse, tmp, n); - else - mpz_add (inverse, tmp, n); - } - else - mpz_set (inverse, tmp); - - TMP_FREE (marker); - return 1; -} diff --git a/rts/gmp/mpz/ior.c b/rts/gmp/mpz/ior.c deleted file mode 100644 index 0bb5a80..0000000 --- a/rts/gmp/mpz/ior.c +++ /dev/null @@ -1,244 +0,0 @@ -/* mpz_ior -- Logical inclusive or. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_ior (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2) -#else -mpz_ior (res, op1, op2) - mpz_ptr res; - mpz_srcptr op1; - mpz_srcptr op2; -#endif -{ - mp_srcptr op1_ptr, op2_ptr; - mp_size_t op1_size, op2_size; - mp_ptr res_ptr; - mp_size_t res_size; - mp_size_t i; - TMP_DECL (marker); - - TMP_MARK (marker); - op1_size = op1->_mp_size; - op2_size = op2->_mp_size; - - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - - if (op1_size >= 0) - { - if (op2_size >= 0) - { - if (op1_size >= op2_size) - { - if (res->_mp_alloc < op1_size) - { - _mpz_realloc (res, op1_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op1_ptr) - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op1_size; - } - else - { - if (res->_mp_alloc < op2_size) - { - _mpz_realloc (res, op2_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op2_ptr) - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] | op2_ptr[i]; - res_size = op2_size; - } - - res->_mp_size = res_size; - return; - } - else /* op2_size < 0 */ - { - /* Fall through to the code at the end of the function. */ - } - } - else - { - if (op2_size < 0) - { - mp_ptr opx; - mp_limb_t cy; - - /* Both operands are negative, so will be the result. - -((-OP1) | (-OP2)) = -(~(OP1 - 1) | ~(OP2 - 1)) = - = ~(~(OP1 - 1) | ~(OP2 - 1)) + 1 = - = ((OP1 - 1) & (OP2 - 1)) + 1 */ - - op1_size = -op1_size; - op2_size = -op2_size; - - res_size = MIN (op1_size, op2_size); - - /* Possible optimization: Decrease mpn_sub precision, - as we won't use the entire res of both. */ - opx = (mp_ptr) TMP_ALLOC (res_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op1_ptr, res_size, (mp_limb_t) 1); - op1_ptr = opx; - - opx = (mp_ptr) TMP_ALLOC (res_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, res_size, (mp_limb_t) 1); - op2_ptr = opx; - - if (res->_mp_alloc < res_size) - { - _mpz_realloc (res, res_size); - res_ptr = res->_mp_d; - /* Don't re-read OP1_PTR and OP2_PTR. They point to - temporary space--never to the space RES->_mp_d used - to point to before reallocation. */ - } - - /* First loop finds the size of the result. */ - for (i = res_size - 1; i >= 0; i--) - if ((op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - - if (res_size != 0) - { - /* Second loop computes the real result. */ - for (i = res_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] & op2_ptr[i]; - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - } - else - { - res_ptr[0] = 1; - res_size = 1; - } - - res->_mp_size = -res_size; - TMP_FREE (marker); - return; - } - else - { - /* We should compute -OP1 | OP2. Swap OP1 and OP2 and fall - through to the code that handles OP1 | -OP2. */ - MPZ_SRCPTR_SWAP (op1, op2); - MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size); - } - } - - { - mp_ptr opx; - mp_limb_t cy; - mp_size_t res_alloc; - mp_size_t count; - - /* Operand 2 negative, so will be the result. - -(OP1 | (-OP2)) = -(OP1 | ~(OP2 - 1)) = - = ~(OP1 | ~(OP2 - 1)) + 1 = - = (~OP1 & (OP2 - 1)) + 1 */ - - op2_size = -op2_size; - - res_alloc = op2_size; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - op2_size -= op2_ptr[op2_size - 1] == 0; - - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - op1_ptr = op1->_mp_d; - res_ptr = res->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_d used to point to before reallocation. */ - } - - if (op1_size >= op2_size) - { - /* We can just ignore the part of OP1 that stretches above OP2, - because the result limbs are zero there. */ - - /* First loop finds the size of the result. */ - for (i = op2_size - 1; i >= 0; i--) - if ((~op1_ptr[i] & op2_ptr[i]) != 0) - break; - res_size = i + 1; - count = res_size; - } - else - { - res_size = op2_size; - - /* Copy the part of OP2 that stretches above OP1, to RES. */ - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, op2_size - op1_size); - count = op1_size; - } - - if (res_size != 0) - { - /* Second loop computes the real result. */ - for (i = count - 1; i >= 0; i--) - res_ptr[i] = ~op1_ptr[i] & op2_ptr[i]; - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - } - else - { - res_ptr[0] = 1; - res_size = 1; - } - - res->_mp_size = -res_size; - } - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/iset.c b/rts/gmp/mpz/iset.c deleted file mode 100644 index 114bc2d..0000000 --- a/rts/gmp/mpz/iset.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpz_init_set (src_integer) -- Make a new multiple precision number with - a value copied from SRC_INTEGER. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set (mpz_ptr w, mpz_srcptr u) -#else -mpz_init_set (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - size = ABS (usize); - - w->_mp_alloc = MAX (size, 1); - w->_mp_d = (mp_ptr) (*_mp_allocate_func) (w->_mp_alloc * BYTES_PER_MP_LIMB); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - w->_mp_size = usize; -} diff --git a/rts/gmp/mpz/iset_d.c b/rts/gmp/mpz/iset_d.c deleted file mode 100644 index 502a893..0000000 --- a/rts/gmp/mpz/iset_d.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpz_init_set_d(integer, val) -- Initialize and assign INTEGER with a double - value VAL. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_d (mpz_ptr dest, double val) -#else -mpz_init_set_d (dest, val) - mpz_ptr dest; - double val; -#endif -{ - dest->_mp_alloc = 1; - dest->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - dest->_mp_size = 0; - mpz_set_d (dest, val); -} diff --git a/rts/gmp/mpz/iset_si.c b/rts/gmp/mpz/iset_si.c deleted file mode 100644 index 842db14..0000000 --- a/rts/gmp/mpz/iset_si.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpz_init_set_si(val) -- Make a new multiple precision number with - value val. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_si (mpz_ptr x, signed long int val) -#else -mpz_init_set_si (x, val) - mpz_ptr x; - signed long int val; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - if (val > 0) - { - x->_mp_d[0] = val; - x->_mp_size = 1; - } - else if (val < 0) - { - x->_mp_d[0] = (unsigned long) -val; - x->_mp_size = -1; - } - else - x->_mp_size = 0; -} diff --git a/rts/gmp/mpz/iset_str.c b/rts/gmp/mpz/iset_str.c deleted file mode 100644 index dfb8c6b..0000000 --- a/rts/gmp/mpz/iset_str.c +++ /dev/null @@ -1,47 +0,0 @@ -/* mpz_init_set_str(string, base) -- Convert the \0-terminated string - STRING in base BASE to a multiple precision integer. Return a MP_INT - structure representing the integer. Allow white space in the - string. If BASE == 0 determine the base in the C standard way, - i.e. 0xhh...h means base 16, 0oo...o means base 8, otherwise - assume base 10. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_init_set_str (mpz_ptr x, const char *str, int base) -#else -mpz_init_set_str (x, str, base) - mpz_ptr x; - const char *str; - int base; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - - /* if str has no digits mpz_set_str leaves x->_mp_size unset */ - x->_mp_size = 0; - - return mpz_set_str (x, str, base); -} diff --git a/rts/gmp/mpz/iset_ui.c b/rts/gmp/mpz/iset_ui.c deleted file mode 100644 index 759182c..0000000 --- a/rts/gmp/mpz/iset_ui.c +++ /dev/null @@ -1,39 +0,0 @@ -/* mpz_init_set_ui(val) -- Make a new multiple precision number with - value val. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_init_set_ui (mpz_ptr x, unsigned long int val) -#else -mpz_init_set_ui (x, val) - mpz_ptr x; - unsigned long int val; -#endif -{ - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - x->_mp_d[0] = val; - x->_mp_size = val != 0; -} diff --git a/rts/gmp/mpz/jacobi.c b/rts/gmp/mpz/jacobi.c deleted file mode 100644 index 9d49e1d..0000000 --- a/rts/gmp/mpz/jacobi.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_jacobi (op1, op2). - Contributed by Bennet Yee (bsy) at Carnegie-Mellon University - -Copyright (C) 1991, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -/* Precondition: both p and q are positive */ - -int -#if __STDC__ -mpz_jacobi (mpz_srcptr pi, mpz_srcptr qi) -#else -mpz_jacobi (pi, qi) - mpz_srcptr pi, qi; -#endif -{ -#if GCDCHECK - int retval; - mpz_t gcdval; - - mpz_init (gcdval); - mpz_gcd (gcdval, pi, qi); - if (!mpz_cmp_ui (gcdval, 1L)) - { - /* J(ab,cb) = J(ab,c)J(ab,b) = J(ab,c)J(0,b) = J(ab,c)*0 */ - retval = 0; - } - else - retval = mpz_legendre (pi, qi); - mpz_clear (gcdval); - return retval; -#else - return mpz_legendre (pi, qi); -#endif -} diff --git a/rts/gmp/mpz/kronsz.c b/rts/gmp/mpz/kronsz.c deleted file mode 100644 index c8c6752..0000000 --- a/rts/gmp/mpz/kronsz.c +++ /dev/null @@ -1,126 +0,0 @@ -/* mpz_si_kronecker -- Kronecker/Jacobi symbol. */ - -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -int -#if __STDC__ -mpz_si_kronecker (long a, mpz_srcptr b) -#else -mpz_si_kronecker (a, b) - long a; - mpz_srcptr b; -#endif -{ - int b_abs_size; - mp_srcptr b_ptr; - mp_limb_t b_low; - int twos; - int result_bit1; - - b_abs_size = ABSIZ (b); - if (b_abs_size == 0) - return JACOBI_S0 (a); /* (a/0) */ - - b_ptr = PTR(b); - b_low = b_ptr[0]; - - /* (0/b) = 1 if b=+/-1, 0 otherwise */ - if (a == 0) - return (b_abs_size == 1) & (b_low == 1); - - /* account for the effect of the sign of b, so can then ignore it */ - result_bit1 = JACOBI_BSGN_SZ_BIT1 (a, b); - - if ((b_low & 1) == 0) - { - /* b even */ - - if ((a & 1) == 0) - return 0; /* (a/b)=0 if both a,b even */ - - /* Require MP_BITS_PER_LIMB even, so that (a/2)^MP_BITS_PER_LIMB = 1, - and so that therefore there's no need to account for how many zero - limbs are stripped. */ - ASSERT ((BITS_PER_MP_LIMB & 1) == 0); - - MPN_STRIP_LOW_ZEROS_NOT_ZERO (b_ptr, b_abs_size); - b_low = b_ptr[0]; - - if ((b_low & 1) == 0) - { - /* odd a, even b */ - - mp_limb_t b_shl_bit1; - - count_trailing_zeros (twos, b_low); - - /* b_shl_bit1 is b>>twos, but with only bit 1 guaranteed */ - if (twos == BITS_PER_MP_LIMB-1) - b_shl_bit1 = (b_abs_size == 1) ? 0 : (b_ptr[1] << 1); - else - b_shl_bit1 = (b_low >> twos); - - result_bit1 ^= JACOBI_ASGN_SU_BIT1 (a, b_shl_bit1); - a = ABS(a); - - if (a == 1) - return JACOBI_BIT1_TO_PN (result_bit1); /* (1/b)=1 */ - - /* twos (a/2), reciprocity to (b/a), and (b/a) = (b mod a / b) */ - return mpn_jacobi_base (mpn_mod_1_rshift (b_ptr, b_abs_size, - twos, a), - a, - result_bit1 - ^ JACOBI_TWOS_U_BIT1 (twos, a) - ^ JACOBI_RECIP_UU_BIT1 (a, b_shl_bit1)); - } - } - - /* b odd */ - - result_bit1 ^= JACOBI_ASGN_SU_BIT1 (a, b_low); - a = ABS(a); - - /* (a/1) = 1 for any a */ - if (b_abs_size == 1 && b_low == 1) - return JACOBI_BIT1_TO_PN (result_bit1); - - /* Note a is cast to unsigned because 0x80..00 doesn't fit in a signed. */ - if ((a & 1) == 0) - { - count_trailing_zeros (twos, a); - a = ((unsigned long) a) >> twos; - result_bit1 ^= JACOBI_TWOS_U_BIT1 (twos, b_low); - } - - if (a == 1) - return JACOBI_BIT1_TO_PN (result_bit1); /* (1/b)=1 */ - - /* reciprocity to (b/a), and (b/a) == (b mod a / a) */ - return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a), a, - result_bit1 ^ JACOBI_RECIP_UU_BIT1 (a, b_low)); -} diff --git a/rts/gmp/mpz/kronuz.c b/rts/gmp/mpz/kronuz.c deleted file mode 100644 index b877e6f..0000000 --- a/rts/gmp/mpz/kronuz.c +++ /dev/null @@ -1,115 +0,0 @@ -/* mpz_ui_kronecker -- Kronecker/Jacobi symbol. */ - -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -int -#if __STDC__ -mpz_ui_kronecker (unsigned long a, mpz_srcptr b) -#else -mpz_ui_kronecker (a, b) - unsigned long a; - mpz_srcptr b; -#endif -{ - int b_abs_size; - mp_srcptr b_ptr; - mp_limb_t b_low; - int twos; - int result_bit1; - - /* (a/0) */ - b_abs_size = ABSIZ (b); - if (b_abs_size == 0) - return JACOBI_U0 (a); - - /* (a/-1)=1 when a>=0, so the sign of b is ignored */ - b_ptr = PTR(b); - b_low = b_ptr[0]; - - /* (0/1)=1; (0/-1)=1; (0/b)=0 for b!=+/-1 - (1/b)=1, for any b */ - if (a <= 1) - return (a == 1) | ((b_abs_size == 1) & (b_low == 1)); - - if (b_low & 1) - { - /* (a/1) = 1 for any a */ - if (b_abs_size == 1 && b_low == 1) - return 1; - - count_trailing_zeros (twos, a); - a >>= twos; - if (a == 1) - return JACOBI_TWOS_U (twos, b_low); /* powers of (2/b) only */ - - /* powers of (2/b); reciprocity to (b/a); (b/a) == (b mod a / a) */ - return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a), - a, - JACOBI_TWOS_U_BIT1 (twos, b_low) - ^ JACOBI_RECIP_UU_BIT1 (b_low, a)); - } - - /* b is even; (a/2)=0 if a is even */ - if ((a & 1) == 0) - return 0; - - /* Require MP_BITS_PER_LIMB even, so (a/2)^MP_BITS_PER_LIMB = 1, and so we - don't have to pay attention to how many trailing zero limbs are - stripped. */ - ASSERT ((BITS_PER_MP_LIMB & 1) == 0); - - MPN_STRIP_LOW_ZEROS_NOT_ZERO (b_ptr, b_abs_size); - b_low = b_ptr[0]; - - if (b_low & 1) - /* reciprocity to (b/a); (b/a) == (b mod a / a) */ - return mpn_jacobi_base (mpn_mod_1 (b_ptr, b_abs_size, a), - a, - JACOBI_RECIP_UU_BIT1 (b_low, a)); - - count_trailing_zeros (twos, b_low); - - /* reciprocity to get (b/a) */ - if (twos == BITS_PER_MP_LIMB-1) - { - if (b_abs_size == 1) - { - /* b==0x800...00, one limb high bit only, so (a/2)^(BPML-1) */ - return JACOBI_TWOS_U (BITS_PER_MP_LIMB-1, a); - } - - /* b_abs_size > 1 */ - result_bit1 = JACOBI_RECIP_UU_BIT1 (a, b_ptr[1] << 1); - } - else - result_bit1 = JACOBI_RECIP_UU_BIT1 (a, b_low >> twos); - - /* powers of (a/2); reciprocity to (b/a); (b/a) == (b mod a / a) */ - return mpn_jacobi_base (mpn_mod_1_rshift (b_ptr, b_abs_size, twos, a), - a, - JACOBI_TWOS_U_BIT1 (twos, a) ^ result_bit1); -} diff --git a/rts/gmp/mpz/kronzs.c b/rts/gmp/mpz/kronzs.c deleted file mode 100644 index edfb465..0000000 --- a/rts/gmp/mpz/kronzs.c +++ /dev/null @@ -1,74 +0,0 @@ -/* mpz_kronecker_si -- Kronecker/Jacobi symbol. */ - -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* This function is expected to be often used with b odd, so there's a test - for this before invoking count_trailing_zeros(). - - After the absolute value of b is established it's treated as an unsigned - long, because 0x80..00 doesn't fit in a signed long. */ - -int -#if __STDC__ -mpz_kronecker_si (mpz_srcptr a, long b) -#else -mpz_kronecker_si (a, b) - mpz_srcptr a; - long b; -#endif -{ - int result_bit1; - int twos; - - if (b == 0) - return JACOBI_Z0 (a); - - result_bit1 = JACOBI_BSGN_ZS_BIT1(a, b); - b = ABS (b); - - if (b == 1) - return JACOBI_BIT1_TO_PN (result_bit1); /* (a/1) = 1 for any a */ - - if (b & 1) - return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, result_bit1); - - /* result 0 if both a,b even */ - if (mpz_even_p (a)) - return 0; - - /* (a/2)=(2/a) when a odd */ - count_trailing_zeros (twos, b); - result_bit1 ^= JACOBI_TWOS_U_BIT1 (twos, PTR(a)[0]); - - b = ((unsigned long) b) >> twos; - if (b == 1) - return JACOBI_BIT1_TO_PN (result_bit1); - else - return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, result_bit1); -} - - diff --git a/rts/gmp/mpz/kronzu.c b/rts/gmp/mpz/kronzu.c deleted file mode 100644 index 749be5d..0000000 --- a/rts/gmp/mpz/kronzu.c +++ /dev/null @@ -1,66 +0,0 @@ -/* mpz_kronecker_ui -- Kronecker/Jacobi symbol. */ - -/* -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. -*/ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -/* This function is expected to be often used with b an odd prime, so the - code for odd b is nice and short. */ - -int -#if __STDC__ -mpz_kronecker_ui (mpz_srcptr a, unsigned long b) -#else -mpz_kronecker_ui (a, b) - mpz_srcptr a; - unsigned long b; -#endif -{ - int twos; - - if (b & 1) - { - if (b != 1) - return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, 0); - else - return 1; /* (a/1)=1 for any a */ - } - - if (b == 0) - return JACOBI_Z0 (a); - - /* (a/2)=0 if a even */ - if (mpz_even_p (a)) - return 0; - - /* (a/2)=(2/a) when a odd */ - count_trailing_zeros (twos, b); - b >>= twos; - if (b == 1) - return JACOBI_TWOS_U (twos, PTR(a)[0]); - - return mpn_jacobi_base (mpz_fdiv_ui (a, b), b, - JACOBI_TWOS_U_BIT1(twos, PTR(a)[0])); -} diff --git a/rts/gmp/mpz/lcm.c b/rts/gmp/mpz/lcm.c deleted file mode 100644 index 7495882..0000000 --- a/rts/gmp/mpz/lcm.c +++ /dev/null @@ -1,61 +0,0 @@ -/* mpz/lcm.c: Calculate the least common multiple of two integers. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void *_mpz_realloc (); - -void -#if __STDC__ -mpz_lcm (mpz_ptr r, mpz_srcptr u, mpz_srcptr v) -#else -mpz_lcm (r, u, v) - mpz_ptr r; - mpz_srcptr u; - mpz_srcptr v; -#endif -{ - mpz_t g; - mp_size_t usize, vsize, size; - TMP_DECL (marker); - - TMP_MARK (marker); - - usize = ABS (SIZ (u)); - vsize = ABS (SIZ (v)); - - if (usize == 0 || vsize == 0) - { - SIZ (r) = 0; - return; - } - - size = MAX (usize, vsize); - MPZ_TMP_INIT (g, size); - - mpz_gcd (g, u, v); - mpz_divexact (g, u, g); - mpz_mul (r, g, v); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/legendre.c b/rts/gmp/mpz/legendre.c deleted file mode 100644 index ab665f7..0000000 --- a/rts/gmp/mpz/legendre.c +++ /dev/null @@ -1,184 +0,0 @@ -/* mpz_legendre (op1, op2). - Contributed by Bennet Yee (bsy) at Carnegie-Mellon University - -Copyright (C) 1992, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" - -#if defined (DEBUG) -#include -#endif - -/* Precondition: both p and q are positive */ - -int -#if __STDC__ -mpz_legendre (mpz_srcptr pi, mpz_srcptr qi) -#else -mpz_legendre (pi, qi) -mpz_srcptr pi, qi; -#endif -{ - mpz_t p, q, qdiv2; -#ifdef Q_MINUS_1 - mpz_t q_minus_1; -#endif - mpz_ptr mtmp; - register mpz_ptr pptr, qptr; - register int retval = 1; - register unsigned long int s; - - pptr = p; - mpz_init_set (pptr, pi); - qptr = q; - mpz_init_set (qptr, qi); - -#ifdef Q_MINUS_1 - mpz_init (q_minus_1); -#endif - mpz_init (qdiv2); - -tail_recurse2: -#ifdef DEBUG - printf ("tail_recurse2: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - s = mpz_scan1 (qptr, 0); - if (s) mpz_tdiv_q_2exp (qptr, qptr, s); /* J(a,2) = 1 */ -#ifdef DEBUG - printf ("2 factor decomposition: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* postcondition q odd */ - if (!mpz_cmp_ui (qptr, 1L)) /* J(a,1) = 1 */ - goto done; - mpz_mod (pptr, pptr, qptr); /* J(a,q) = J(b,q) when a == b mod q */ -#ifdef DEBUG - printf ("mod out by q: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* quick calculation to get approximate size first */ - /* precondition: p < q */ - if ((mpz_sizeinbase (pptr, 2) + 1 >= mpz_sizeinbase (qptr,2)) - && (mpz_tdiv_q_2exp (qdiv2, qptr, 1L), mpz_cmp (pptr, qdiv2) > 0)) - { - /* p > q/2 */ - mpz_sub (pptr, qptr, pptr); - /* J(-1,q) = (-1)^((q-1)/2), q odd */ - if (mpz_get_ui (qptr) & 2) - retval = -retval; - } - /* p < q/2 */ -#ifdef Q_MINUS_1 - mpz_sub_ui (q_minus_q, qptr, 1L); -#endif -tail_recurse: /* we use tail_recurse only if q has not changed */ -#ifdef DEBUG - printf ("tail_recurse1: p="); - mpz_out_str (stdout, 10, pptr); - printf ("\nq="); - mpz_out_str (stdout, 10, qptr); - putchar ('\n'); -#endif - /* - * J(0,q) = 0 - * this occurs only if gcd(p,q) != 1 which is never true for - * Legendre function. - */ - if (!mpz_cmp_ui (pptr, 0L)) - { - retval = 0; - goto done; - } - - if (!mpz_cmp_ui (pptr, 1L)) - { - /* J(1,q) = 1 */ - /* retval *= 1; */ - goto done; - } -#ifdef Q_MINUS_1 - if (!mpz_cmp (pptr, q_minus_1)) - { - /* J(-1,q) = (-1)^((q-1)/2) */ - if (mpz_get_ui (qptr) & 2) - retval = -retval; - /* else retval *= 1; */ - goto done; - } -#endif - /* - * we do not handle J(xy,q) except for x==2 - * since we do not want to factor - */ - if ((s = mpz_scan1 (pptr, 0)) != 0) - { - /* - * J(2,q) = (-1)^((q^2-1)/8) - * - * Note that q odd guarantees that q^2-1 is divisible by 8: - * Let a: q=2a+1. q^2 = 4a^2+4a+1, (q^2-1)/8 = a(a+1)/2, qed - * - * Now, note that this means that the low two bits of _a_ - * (or the low bits of q shifted over by 1 determines - * the factor). - */ - mpz_tdiv_q_2exp (pptr, pptr, s); - - /* even powers of 2 gives J(2,q)^{2n} = 1 */ - if (s & 1) - { - s = mpz_get_ui (qptr) >> 1; - s = s * (s + 1); - if (s & 2) - retval = -retval; - } - goto tail_recurse; - } - /* - * we know p is odd since we have cast out 2s - * precondition that q is odd guarantees both odd. - * - * quadratic reciprocity - * J(p,q) = (-1)^((p-1)(q-1)/4) * J(q,p) - */ - if ((s = mpz_scan1 (pptr, 1)) <= 2 && (s + mpz_scan1 (qptr, 1)) <= 2) - retval = -retval; - - mtmp = pptr; pptr = qptr; qptr = mtmp; - goto tail_recurse2; -done: - mpz_clear (p); - mpz_clear (q); - mpz_clear (qdiv2); -#ifdef Q_MINUS_1 - mpz_clear (q_minus_1); -#endif - return retval; -} diff --git a/rts/gmp/mpz/mod.c b/rts/gmp/mpz/mod.c deleted file mode 100644 index 87033b3..0000000 --- a/rts/gmp/mpz/mod.c +++ /dev/null @@ -1,63 +0,0 @@ -/* mpz_mod -- The mathematical mod function. - -Copyright (C) 1991, 1993, 1994, 1995, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_mod (mpz_ptr rem, mpz_srcptr dividend, mpz_srcptr divisor) -#else -mpz_mod (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - mpz_srcptr divisor; -#endif -{ - mp_size_t divisor_size = divisor->_mp_size; - mpz_t temp_divisor; /* N.B.: lives until function returns! */ - TMP_DECL (marker); - - TMP_MARK (marker); - - /* We need the original value of the divisor after the remainder has been - preliminary calculated. We have to copy it to temporary space if it's - the same variable as REM. */ - if (rem == divisor) - { - MPZ_TMP_INIT (temp_divisor, ABS (divisor_size)); - mpz_set (temp_divisor, divisor); - divisor = temp_divisor; - } - - mpz_tdiv_r (rem, dividend, divisor); - - if (rem->_mp_size != 0) - { - if (dividend->_mp_size < 0) - if (divisor->_mp_size < 0) - mpz_sub (rem, rem, divisor); - else - mpz_add (rem, rem, divisor); - } - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/mul.c b/rts/gmp/mpz/mul.c deleted file mode 100644 index 7854788..0000000 --- a/rts/gmp/mpz/mul.c +++ /dev/null @@ -1,131 +0,0 @@ -/* mpz_mul -- Multiply two integers. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_mul (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_mul (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -mult (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -mult (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t usize = u->_mp_size; - mp_size_t vsize = v->_mp_size; - mp_size_t wsize; - mp_size_t sign_product; - mp_ptr up, vp; - mp_ptr wp; - mp_ptr free_me = NULL; - size_t free_me_size; - mp_limb_t cy_limb; - TMP_DECL (marker); - - TMP_MARK (marker); - sign_product = usize ^ vsize; - usize = ABS (usize); - vsize = ABS (vsize); - - if (usize < vsize) - { - /* Swap U and V. */ - {const __mpz_struct *t = u; u = v; v = t;} - {mp_size_t t = usize; usize = vsize; vsize = t;} - } - - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - /* Ensure W has space enough to store the result. */ - wsize = usize + vsize; - if (w->_mp_alloc < wsize) - { - if (wp == up || wp == vp) - { - free_me = wp; - free_me_size = w->_mp_alloc; - } - else - (*_mp_free_func) (wp, w->_mp_alloc * BYTES_PER_MP_LIMB); - - w->_mp_alloc = wsize; - wp = (mp_ptr) (*_mp_allocate_func) (wsize * BYTES_PER_MP_LIMB); - w->_mp_d = wp; - } - else - { - /* Make U and V not overlap with W. */ - if (wp == up) - { - /* W and U are identical. Allocate temporary space for U. */ - up = (mp_ptr) TMP_ALLOC (usize * BYTES_PER_MP_LIMB); - /* Is V identical too? Keep it identical with U. */ - if (wp == vp) - vp = up; - /* Copy to the temporary space. */ - MPN_COPY (up, wp, usize); - } - else if (wp == vp) - { - /* W and V are identical. Allocate temporary space for V. */ - vp = (mp_ptr) TMP_ALLOC (vsize * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. */ - MPN_COPY (vp, wp, vsize); - } - } - - if (vsize == 0) - { - wsize = 0; - } - else - { - cy_limb = mpn_mul (wp, up, usize, vp, vsize); - wsize = usize + vsize; - wsize -= cy_limb == 0; - } - - w->_mp_size = sign_product < 0 ? -wsize : wsize; - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/mul_2exp.c b/rts/gmp/mpz/mul_2exp.c deleted file mode 100644 index abea5fe..0000000 --- a/rts/gmp/mpz/mul_2exp.c +++ /dev/null @@ -1,76 +0,0 @@ -/* mpz_mul_2exp -- Multiply a bignum by 2**CNT - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_mul_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_mul_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize = u->_mp_size; - mp_size_t abs_usize = ABS (usize); - mp_size_t wsize; - mp_size_t limb_cnt; - mp_ptr wp; - mp_limb_t wlimb; - - if (usize == 0) - { - w->_mp_size = 0; - return; - } - - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = abs_usize + limb_cnt + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - wp = w->_mp_d; - wsize = abs_usize + limb_cnt; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - wlimb = mpn_lshift (wp + limb_cnt, u->_mp_d, abs_usize, cnt); - if (wlimb != 0) - { - wp[wsize] = wlimb; - wsize++; - } - } - else - { - MPN_COPY_DECR (wp + limb_cnt, u->_mp_d, abs_usize); - } - - /* Zero all whole limbs at low end. Do it here and not before calling - mpn_lshift, not to lose for U == W. */ - MPN_ZERO (wp, limb_cnt); - - w->_mp_size = usize >= 0 ? wsize : -wsize; -} diff --git a/rts/gmp/mpz/mul_siui.c b/rts/gmp/mpz/mul_siui.c deleted file mode 100644 index 9849cd4..0000000 --- a/rts/gmp/mpz/mul_siui.c +++ /dev/null @@ -1,81 +0,0 @@ -/* mpz_mul_ui/si (product, multiplier, small_multiplicand) -- Set PRODUCT to - MULTIPLICATOR times SMALL_MULTIPLICAND. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - - -#ifdef OPERATION_mul_ui -#define FUNCTION mpz_mul_ui -#define MULTIPLICAND_UNSIGNED unsigned -#define MULTIPLICAND_ABS(x) x -#else -#ifdef OPERATION_mul_si -#define FUNCTION mpz_mul_si -#define MULTIPLICAND_UNSIGNED -#define MULTIPLICAND_ABS(x) ABS(x) -#else -Error, error, unrecognised OPERATION -#endif -#endif - - -void -#if __STDC__ -FUNCTION (mpz_ptr prod, mpz_srcptr mult, - MULTIPLICAND_UNSIGNED long int small_mult) -#else -FUNCTION (prod, mult, small_mult) - mpz_ptr prod; - mpz_srcptr mult; - MULTIPLICAND_UNSIGNED long int small_mult; -#endif -{ - mp_size_t size = mult->_mp_size; - mp_size_t sign_product = size; - mp_limb_t cy; - mp_size_t prod_size; - mp_ptr prod_ptr; - - if (size == 0 || small_mult == 0) - { - prod->_mp_size = 0; - return; - } - size = ABS (size); - - prod_size = size + 1; - if (prod->_mp_alloc < prod_size) - _mpz_realloc (prod, prod_size); - - prod_ptr = prod->_mp_d; - - cy = mpn_mul_1 (prod_ptr, mult->_mp_d, size, - (mp_limb_t) MULTIPLICAND_ABS (small_mult)); - if (cy != 0) - { - prod_ptr[size] = cy; - size++; - } - - prod->_mp_size = ((sign_product < 0) ^ (small_mult < 0)) ? -size : size; -} diff --git a/rts/gmp/mpz/neg.c b/rts/gmp/mpz/neg.c deleted file mode 100644 index 566c3a9..0000000 --- a/rts/gmp/mpz/neg.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_neg(mpz_ptr dst, mpz_ptr src) -- Assign the negated value of SRC to DST. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_neg (mpz_ptr w, mpz_srcptr u) -#else -mpz_neg (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - - if (u != w) - { - size = ABS (usize); - - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - } - - w->_mp_size = -usize; -} diff --git a/rts/gmp/mpz/nextprime.c b/rts/gmp/mpz/nextprime.c deleted file mode 100644 index f024dd1..0000000 --- a/rts/gmp/mpz/nextprime.c +++ /dev/null @@ -1,120 +0,0 @@ -/* mpz_nextprime(p,t) - compute the next prime > t and store that in p. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_nextprime (mpz_ptr p, mpz_srcptr t) -#else -mpz_nextprime (p, t) - mpz_ptr p; - mpz_srcptr t; -#endif -{ - mpz_add_ui (p, t, 1L); - while (! mpz_probab_prime_p (p, 5)) - mpz_add_ui (p, p, 1L); -} - -#if 0 -/* This code is not yet tested. Will be enabled in 3.1. */ - -status unsigned short primes[] = -{ -3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97, -101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181, -191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277, -281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383, -389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487, -491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601, -607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709, -719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827, -829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947, -953,967,971,977,983,991,997 -}; - -#define NUMBER_OF_PRIMES 167 - -void -#if __STDC__ -mpz_nextprime (mpz_ptr p, mpz_srcptr n) -#else -mpz_nextprime (p, n) - mpz_ptr p; - mpz_srcptr n; -#endif -{ - mpz_t tmp; - unsigned short *moduli; - unsigned long difference; - int i; - int composite; - - /* First handle tiny numbers */ - if (mpz_cmp_ui (n, 2) < 0) - { - mpz_set_ui (p, 2); - return; - } - mpz_add_ui (p, n, 1); - mpz_setbit (p, 0); - - if (mpz_cmp_ui (p, 7) <= 0) - return; - - prime_limit = NUMBER_OF_PRIMES - 1; - if (mpz_cmp_ui (p, primes[prime_limit]) <= 0) - /* Just use first three entries (3,5,7) of table for small numbers */ - prime_limit = 3; - if (prime_limit) - { - /* Compute residues modulo small odd primes */ - moduli = (unsigned short *) TMP_ALLOC (prime_limit * sizeof moduli[0]); - for (i = 0; i < prime_limit; i++) - moduli[i] = mpz_fdiv_ui (p, primes[i]); - } - for (difference = 0; ; difference += 2) - { - composite = 0; - - /* First check residues */ - for (i = 0; i < prime_limit; i++) - { - int acc, pr; - composite |= (moduli[i] == 0); - acc = moduli[i] + 2; - pr = primes[i]; - moduli[i] = acc >= pr ? acc - pr : acc; - } - if (composite) - continue; - - mpz_add_ui (p, p, difference); - difference = 0; - - /* Miller-Rabin test */ - if (mpz_millerrabin (p, 2)) - break; - } -} -#endif diff --git a/rts/gmp/mpz/out_raw.c b/rts/gmp/mpz/out_raw.c deleted file mode 100644 index 6270947..0000000 --- a/rts/gmp/mpz/out_raw.c +++ /dev/null @@ -1,89 +0,0 @@ -/* mpz_out_raw -- Output a mpz_t in binary. Use an endianess and word size - independent format. - -Copyright (C) 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_out_raw (FILE *stream, mpz_srcptr x) -#else -mpz_out_raw (stream, x) - FILE *stream; - mpz_srcptr x; -#endif -{ - int i; - mp_size_t s; - mp_size_t xsize = ABS (x->_mp_size); - mp_srcptr xp = x->_mp_d; - mp_size_t out_bytesize; - mp_limb_t hi_limb; - int n_bytes_in_hi_limb; - - if (stream == 0) - stream = stdout; - - if (xsize == 0) - { - for (i = 4 - 1; i >= 0; i--) - fputc (0, stream); - return ferror (stream) ? 0 : 4; - } - - hi_limb = xp[xsize - 1]; - for (i = BYTES_PER_MP_LIMB - 1; i > 0; i--) - { - if ((hi_limb >> i * BITS_PER_CHAR) != 0) - break; - } - n_bytes_in_hi_limb = i + 1; - out_bytesize = BYTES_PER_MP_LIMB * (xsize - 1) + n_bytes_in_hi_limb; - if (x->_mp_size < 0) - out_bytesize = -out_bytesize; - - /* Make the size 4 bytes on all machines, to make the format portable. */ - for (i = 4 - 1; i >= 0; i--) - fputc ((out_bytesize >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), - stream); - - /* Output from the most significant limb to the least significant limb, - with each limb also output in decreasing significance order. */ - - /* Output the most significant limb separately, since we will only - output some of its bytes. */ - for (i = n_bytes_in_hi_limb - 1; i >= 0; i--) - fputc ((hi_limb >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), stream); - - /* Output the remaining limbs. */ - for (s = xsize - 2; s >= 0; s--) - { - mp_limb_t x_limb; - - x_limb = xp[s]; - for (i = BYTES_PER_MP_LIMB - 1; i >= 0; i--) - fputc ((x_limb >> (i * BITS_PER_CHAR)) % (1 << BITS_PER_CHAR), stream); - } - return ferror (stream) ? 0 : ABS (out_bytesize) + 4; -} diff --git a/rts/gmp/mpz/out_str.c b/rts/gmp/mpz/out_str.c deleted file mode 100644 index bf971b0..0000000 --- a/rts/gmp/mpz/out_str.c +++ /dev/null @@ -1,108 +0,0 @@ -/* mpz_out_str(stream, base, integer) -- Output to STREAM the multi prec. - integer INTEGER in base BASE. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_out_str (FILE *stream, int base, mpz_srcptr x) -#else -mpz_out_str (stream, base, x) - FILE *stream; - int base; - mpz_srcptr x; -#endif -{ - mp_ptr xp; - mp_size_t x_size = x->_mp_size; - unsigned char *str; - size_t str_size; - size_t i; - size_t written; - char *num_to_text; - TMP_DECL (marker); - - if (stream == 0) - stream = stdout; - - if (base >= 0) - { - if (base == 0) - base = 10; - num_to_text = "0123456789abcdefghijklmnopqrstuvwxyz"; - } - else - { - base = -base; - num_to_text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } - - if (x_size == 0) - { - fputc ('0', stream); - return ferror (stream) ? 0 : 1; - } - - written = 0; - - if (x_size < 0) - { - fputc ('-', stream); - x_size = -x_size; - written = 1; - } - - TMP_MARK (marker); - str_size = ((size_t) (x_size * BITS_PER_MP_LIMB - * __mp_bases[base].chars_per_bit_exactly)) + 3; - str = (unsigned char *) TMP_ALLOC (str_size); - - /* Move the number to convert into temporary space, since mpn_get_str - clobbers its argument + needs one extra high limb.... */ - xp = (mp_ptr) TMP_ALLOC ((x_size + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (xp, x->_mp_d, x_size); - - str_size = mpn_get_str (str, base, xp, x_size); - - /* mpn_get_str might make some leading zeros. Skip them. */ - while (*str == 0) - { - str_size--; - str++; - } - - /* Translate to printable chars. */ - for (i = 0; i < str_size; i++) - str[i] = num_to_text[str[i]]; - str[str_size] = 0; - - { - size_t fwret; - fwret = fwrite ((char *) str, 1, str_size, stream); - written += fwret; - } - - TMP_FREE (marker); - return ferror (stream) ? 0 : written; -} diff --git a/rts/gmp/mpz/perfpow.c b/rts/gmp/mpz/perfpow.c deleted file mode 100644 index e71670a..0000000 --- a/rts/gmp/mpz/perfpow.c +++ /dev/null @@ -1,272 +0,0 @@ -/* mpz_perfect_power_p(arg) -- Return non-zero if ARG is a perfect power, - zero otherwise. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* - We are to determine if c is a perfect power, c = a ^ b. - Assume c is divisible by 2^n and that codd = c/2^n is odd. - Assume a is divisible by 2^m and that aodd = a/2^m is odd. - It is always true that m divides n. - - * If n is prime, either 1) a is 2*aodd and b = n - or 2) a = c and b = 1. - So for n prime, we readily have a solution. - * If n is factorable into the non-trivial factors p1,p2,... - Since m divides n, m has a subset of n's factors and b = n / m. - - BUG: Should handle negative numbers, since they can be odd perfect powers. -*/ - -/* This is a naive approach to recognizing perfect powers. - Many things can be improved. In particular, we should use p-adic - arithmetic for computing possible roots. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -static unsigned long int gcd _PROTO ((unsigned long int a, unsigned long int b)); -static int isprime _PROTO ((unsigned long int t)); - -static const unsigned short primes[] = -{ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97,101,103,107,109,113,127,131, - 137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223, - 227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311, - 313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409, - 419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503, - 509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613, - 617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719, - 727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827, - 829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941, - 947,953,967,971,977,983,991,997,0 -}; -#define SMALLEST_OMITTED_PRIME 1009 - - -int -#if __STDC__ -mpz_perfect_power_p (mpz_srcptr u) -#else -mpz_perfect_power_p (u) - mpz_srcptr u; -#endif -{ - unsigned long int prime; - unsigned long int n, n2; - int i; - unsigned long int rem; - mpz_t u2, q; - int exact; - mp_size_t uns; - TMP_DECL (marker); - - if (mpz_cmp_ui (u, 1) <= 0) - return 0; - - n2 = mpz_scan1 (u, 0); - if (n2 == 1) - return 0; - - TMP_MARK (marker); - - uns = ABSIZ (u) - n2 / BITS_PER_MP_LIMB; - MPZ_TMP_INIT (q, uns); - MPZ_TMP_INIT (u2, uns); - - mpz_tdiv_q_2exp (u2, u, n2); - - if (isprime (n2)) - goto n2prime; - - for (i = 1; primes[i] != 0; i++) - { - prime = primes[i]; - rem = mpz_tdiv_ui (u2, prime); - if (rem == 0) /* divisable? */ - { - rem = mpz_tdiv_q_ui (q, u2, prime * prime); - if (rem != 0) - { - TMP_FREE (marker); - return 0; - } - mpz_swap (q, u2); - for (n = 2;;) - { - rem = mpz_tdiv_q_ui (q, u2, prime); - if (rem != 0) - break; - mpz_swap (q, u2); - n++; - } - - n2 = gcd (n2, n); - if (n2 == 1) - { - TMP_FREE (marker); - return 0; - } - - /* As soon as n2 becomes a prime number, stop factoring. - Either we have u=x^n2 or u is not a perfect power. */ - if (isprime (n2)) - goto n2prime; - } - } - - if (mpz_cmp_ui (u2, 1) == 0) - { - TMP_FREE (marker); - return 1; - } - - if (n2 == 0) - { - unsigned long int nth; - /* We did not find any factors above. We have to consider all values - of n. */ - for (nth = 2;; nth++) - { - if (! isprime (nth)) - continue; -#if 0 - exact = mpz_padic_root (q, u2, nth, PTH); - if (exact) -#endif - exact = mpz_root (q, u2, nth); - if (exact) - { - TMP_FREE (marker); - return 1; - } - if (mpz_cmp_ui (q, SMALLEST_OMITTED_PRIME) < 0) - { - TMP_FREE (marker); - return 0; - } - } - } - else - { - unsigned long int nth; - /* We found some factors above. We just need to consider values of n - that divides n2. */ - for (nth = 2; nth <= n2; nth++) - { - if (! isprime (nth)) - continue; - if (n2 % nth != 0) - continue; -#if 0 - exact = mpz_padic_root (q, u2, nth, PTH); - if (exact) -#endif - exact = mpz_root (q, u2, nth); - if (exact) - { - TMP_FREE (marker); - return 1; - } - if (mpz_cmp_ui (q, SMALLEST_OMITTED_PRIME) < 0) - { - TMP_FREE (marker); - return 0; - } - } - - TMP_FREE (marker); - return 0; - } - -n2prime: - exact = mpz_root (NULL, u2, n2); - TMP_FREE (marker); - return exact; -} - -static unsigned long int -#if __STDC__ -gcd (unsigned long int a, unsigned long int b) -#else -gcd (a, b) - unsigned long int a, b; -#endif -{ - int an2, bn2, n2; - - if (a == 0) - return b; - if (b == 0) - return a; - - count_trailing_zeros (an2, a); - a >>= an2; - - count_trailing_zeros (bn2, b); - b >>= bn2; - - n2 = MIN (an2, bn2); - - while (a != b) - { - if (a > b) - { - a -= b; - do - a >>= 1; - while ((a & 1) == 0); - } - else /* b > a. */ - { - b -= a; - do - b >>= 1; - while ((b & 1) == 0); - } - } - - return a << n2; -} - -static int -#if __STDC__ -isprime (unsigned long int t) -#else -isprime (t) - unsigned long int t; -#endif -{ - unsigned long int q, r, d; - - if (t < 3 || (t & 1) == 0) - return t == 2; - - for (d = 3, r = 1; r != 0; d += 2) - { - q = t / d; - r = t - q * d; - if (q < d) - return 1; - } - return 0; -} diff --git a/rts/gmp/mpz/perfsqr.c b/rts/gmp/mpz/perfsqr.c deleted file mode 100644 index 92e8d08..0000000 --- a/rts/gmp/mpz/perfsqr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* mpz_perfect_square_p(arg) -- Return non-zero if ARG is a perfect square, - zero otherwise. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_perfect_square_p (mpz_srcptr a) -#else -mpz_perfect_square_p (a) - mpz_srcptr a; -#endif -{ - mp_size_t asize = a->_mp_size; - - /* No negative numbers are perfect squares. */ - if (asize < 0) - return 0; - - /* Zero is a perfect square. */ - if (asize == 0) - return 1; - - return mpn_perfect_square_p (a->_mp_d, asize); -} diff --git a/rts/gmp/mpz/popcount.c b/rts/gmp/mpz/popcount.c deleted file mode 100644 index 3105258..0000000 --- a/rts/gmp/mpz/popcount.c +++ /dev/null @@ -1,42 +0,0 @@ -/* mpz_popcount(mpz_ptr op) -- Population count of OP. If the operand is - negative, return ~0 (a novel representation of infinity). - -Copyright (C) 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_popcount (mpz_srcptr u) -#else -mpz_popcount (u) - mpz_srcptr u; -#endif -{ - mp_size_t usize; - - usize = u->_mp_size; - - if ((usize) < 0) - return ~ (unsigned long int) 0; - - return mpn_popcount (u->_mp_d, usize); -} diff --git a/rts/gmp/mpz/pow_ui.c b/rts/gmp/mpz/pow_ui.c deleted file mode 100644 index 96ca114..0000000 --- a/rts/gmp/mpz/pow_ui.c +++ /dev/null @@ -1,129 +0,0 @@ -/* mpz_pow_ui(res, base, exp) -- Set RES to BASE**EXP. - -Copyright (C) 1991, 1993, 1994, 1996, 1997 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#ifdef BERKELEY_MP -#include "mp.h" -#endif -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_pow_ui (mpz_ptr r, mpz_srcptr b, unsigned long int e) -#else -mpz_pow_ui (r, b, e) - mpz_ptr r; - mpz_srcptr b; - unsigned long int e; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -rpow (const MINT *b, signed short int e, MINT *r) -#else -rpow (b, e, r) - const MINT *b; - signed short int e; - MINT *r; -#endif -#endif /* BERKELEY_MP */ -{ - mp_ptr rp, bp, tp, xp; - mp_size_t ralloc, rsize, bsize; - int cnt, i; - mp_limb_t blimb; - TMP_DECL (marker); - - bsize = ABS (b->_mp_size); - - /* Single out cases that give result == 0 or 1. These tests are here - to simplify the general code below, not to optimize. */ - if (e == 0) - { - r->_mp_d[0] = 1; - r->_mp_size = 1; - return; - } - if (bsize == 0 -#ifdef BERKELEY_MP - || e < 0 -#endif - ) - { - r->_mp_size = 0; - return; - } - - bp = b->_mp_d; - - blimb = bp[bsize - 1]; - if (bsize == 1 && blimb < 0x100) - { - /* Estimate space requirements accurately. Using the code from the - `else' path would over-estimate space requirements wildly. */ - float lb = __mp_bases[blimb].chars_per_bit_exactly; - ralloc = 3 + ((mp_size_t) (e / lb) / BITS_PER_MP_LIMB); - } - else - { - /* Over-estimate space requirements somewhat. */ - count_leading_zeros (cnt, blimb); - ralloc = bsize * e - cnt * e / BITS_PER_MP_LIMB + 2; - } - - TMP_MARK (marker); - - /* The two areas are used to alternatingly hold the input and recieve the - product for mpn_mul. (This scheme is used to fulfill the requirements - of mpn_mul; that the product space may not be the same as any of the - input operands.) */ - rp = (mp_ptr) TMP_ALLOC (ralloc * BYTES_PER_MP_LIMB); - tp = (mp_ptr) TMP_ALLOC (ralloc * BYTES_PER_MP_LIMB); - - MPN_COPY (rp, bp, bsize); - rsize = bsize; - count_leading_zeros (cnt, e); - - for (i = BITS_PER_MP_LIMB - cnt - 2; i >= 0; i--) - { - mpn_mul_n (tp, rp, rp, rsize); - rsize = 2 * rsize; - rsize -= tp[rsize - 1] == 0; - xp = tp; tp = rp; rp = xp; - - if ((e & ((mp_limb_t) 1 << i)) != 0) - { - rsize = rsize + bsize - (mpn_mul (tp, rp, rsize, bp, bsize) == 0); - xp = tp; tp = rp; rp = xp; - } - } - - /* Now then we know the exact space requirements, reallocate if - necessary. */ - if (r->_mp_alloc < rsize) - _mpz_realloc (r, rsize); - - MPN_COPY (r->_mp_d, rp, rsize); - r->_mp_size = (e & 1) == 0 || b->_mp_size >= 0 ? rsize : -rsize; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/powm.c b/rts/gmp/mpz/powm.c deleted file mode 100644 index e6af855..0000000 --- a/rts/gmp/mpz/powm.c +++ /dev/null @@ -1,364 +0,0 @@ -/* mpz_powm(res,base,exp,mod) -- Set RES to (base**exp) mod MOD. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 2000 Free Software Foundation, Inc. -Contributed by Paul Zimmermann. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - - -/* set c <- (a*b)/R^n mod m c has to have at least (2n) allocated limbs */ -static void -#if __STDC__ -mpz_redc (mpz_ptr c, mpz_srcptr a, mpz_srcptr b, mpz_srcptr m, mp_limb_t Nprim) -#else -mpz_redc (c, a, b, m, Nprim) - mpz_ptr c; - mpz_srcptr a; - mpz_srcptr b; - mpz_srcptr m; - mp_limb_t Nprim; -#endif -{ - mp_ptr cp, mp = PTR (m); - mp_limb_t cy, cout = 0; - mp_limb_t q; - size_t j, n = ABSIZ (m); - - ASSERT (ALLOC (c) >= 2 * n); - - mpz_mul (c, a, b); - cp = PTR (c); - j = ABSIZ (c); - MPN_ZERO (cp + j, 2 * n - j); - for (j = 0; j < n; j++) - { - q = cp[0] * Nprim; - cy = mpn_addmul_1 (cp, mp, n, q); - cout += mpn_add_1 (cp + n, cp + n, n - j, cy); - cp++; - } - cp -= n; - if (cout) - { - cy = cout - mpn_sub_n (cp, cp + n, mp, n); - while (cy) - cy -= mpn_sub_n (cp, cp, mp, n); - } - else - MPN_COPY (cp, cp + n, n); - MPN_NORMALIZE (cp, n); - SIZ (c) = SIZ (c) < 0 ? -n : n; -} - -/* average number of calls to redc for an exponent of n bits - with the sliding window algorithm of base 2^k: the optimal is - obtained for the value of k which minimizes 2^(k-1)+n/(k+1): - - n\k 4 5 6 7 8 - 128 156* 159 171 200 261 - 256 309 307* 316 343 403 - 512 617 607* 610 632 688 - 1024 1231 1204 1195* 1207 1256 - 2048 2461 2399 2366 2360* 2396 - 4096 4918 4787 4707 4665* 4670 -*/ - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_powm (mpz_ptr res, mpz_srcptr base, mpz_srcptr e, mpz_srcptr mod) -#else -mpz_powm (res, base, e, mod) - mpz_ptr res; - mpz_srcptr base; - mpz_srcptr e; - mpz_srcptr mod; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -pow (mpz_srcptr base, mpz_srcptr e, mpz_srcptr mod, mpz_ptr res) -#else -pow (base, e, mod, res) - mpz_srcptr base; - mpz_srcptr e; - mpz_srcptr mod; - mpz_ptr res; -#endif -#endif /* BERKELEY_MP */ -{ - mp_limb_t invm, *ep, c, mask; - mpz_t xx, *g; - mp_size_t n, i, K, j, l, k; - int sh; - int use_redc; - -#ifdef POWM_DEBUG - mpz_t exp; - mpz_init (exp); -#endif - - n = ABSIZ (mod); - - if (n == 0) - DIVIDE_BY_ZERO; - - if (SIZ (e) == 0) - { - /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 - depending on if MOD equals 1. */ - SIZ(res) = (ABSIZ (mod) == 1 && (PTR(mod))[0] == 1) ? 0 : 1; - PTR(res)[0] = 1; - return; - } - - /* Use REDC instead of usual reduction for sizes < POWM_THRESHOLD. - In REDC each modular multiplication costs about 2*n^2 limbs operations, - whereas using usual reduction it costs 3*K(n), where K(n) is the cost of a - multiplication using Karatsuba, and a division is assumed to cost 2*K(n), - for example using Burnikel-Ziegler's algorithm. This gives a theoretical - threshold of a*KARATSUBA_SQR_THRESHOLD, with a=(3/2)^(1/(2-ln(3)/ln(2))) ~ - 2.66. */ - /* For now, also disable REDC when MOD is even, as the inverse can't - handle that. */ - -#ifndef POWM_THRESHOLD -#define POWM_THRESHOLD ((8 * KARATSUBA_SQR_THRESHOLD) / 3) -#endif - - use_redc = (n < POWM_THRESHOLD && PTR(mod)[0] % 2 != 0); - if (use_redc) - { - /* invm = -1/m mod 2^BITS_PER_MP_LIMB, must have m odd */ - modlimb_invert (invm, PTR(mod)[0]); - invm = -invm; - } - - /* determines optimal value of k */ - l = ABSIZ (e) * BITS_PER_MP_LIMB; /* number of bits of exponent */ - k = 1; - K = 2; - while (2 * l > K * (2 + k * (3 + k))) - { - k++; - K *= 2; - } - - g = (mpz_t *) (*_mp_allocate_func) (K / 2 * sizeof (mpz_t)); - /* compute x*R^n where R=2^BITS_PER_MP_LIMB */ - mpz_init (g[0]); - if (use_redc) - { - mpz_mul_2exp (g[0], base, n * BITS_PER_MP_LIMB); - mpz_mod (g[0], g[0], mod); - } - else - mpz_mod (g[0], base, mod); - - /* compute xx^g for odd g < 2^k */ - mpz_init (xx); - if (use_redc) - { - _mpz_realloc (xx, 2 * n); - mpz_redc (xx, g[0], g[0], mod, invm); /* xx = x^2*R^n */ - } - else - { - mpz_mul (xx, g[0], g[0]); - mpz_mod (xx, xx, mod); - } - for (i = 1; i < K / 2; i++) - { - mpz_init (g[i]); - if (use_redc) - { - _mpz_realloc (g[i], 2 * n); - mpz_redc (g[i], g[i - 1], xx, mod, invm); /* g[i] = x^(2i+1)*R^n */ - } - else - { - mpz_mul (g[i], g[i - 1], xx); - mpz_mod (g[i], g[i], mod); - } - } - - /* now starts the real stuff */ - mask = (mp_limb_t) ((1< 0) - { - i--; - c = (c << (-sh)) | (ep[i] >> (BITS_PER_MP_LIMB + sh)); - sh += BITS_PER_MP_LIMB; - } - } - else - c = c >> sh; -#ifdef POWM_DEBUG - printf ("-1/m mod 2^%u = %lu\n", BITS_PER_MP_LIMB, invm); - mpz_set_ui (exp, c); -#endif - j=0; - while (c % 2 == 0) - { - j++; - c = (c >> 1); - } - mpz_set (xx, g[c >> 1]); - while (j--) - { - if (use_redc) - mpz_redc (xx, xx, xx, mod, invm); - else - { - mpz_mul (xx, xx, xx); - mpz_mod (xx, xx, mod); - } - } - -#ifdef POWM_DEBUG - printf ("x^"); mpz_out_str (0, 10, exp); - printf ("*2^%u mod m = ", n * BITS_PER_MP_LIMB); mpz_out_str (0, 10, xx); - putchar ('\n'); -#endif - - while (i > 0 || sh > 0) - { - c = ep[i]; - sh -= k; - l = k; /* number of bits treated */ - if (sh < 0) - { - if (i > 0) - { - i--; - c = (c << (-sh)) | (ep[i] >> (BITS_PER_MP_LIMB + sh)); - sh += BITS_PER_MP_LIMB; - } - else - { - l += sh; /* may be less bits than k here */ - c = c & ((1<> sh; - c = c & mask; - - /* this while loop implements the sliding window improvement */ - while ((c & (1 << (k - 1))) == 0 && (i > 0 || sh > 0)) - { - if (use_redc) mpz_redc (xx, xx, xx, mod, invm); - else - { - mpz_mul (xx, xx, xx); - mpz_mod (xx, xx, mod); - } - if (sh) - { - sh--; - c = (c<<1) + ((ep[i]>>sh) & 1); - } - else - { - i--; - sh = BITS_PER_MP_LIMB - 1; - c = (c<<1) + (ep[i]>>sh); - } - } - -#ifdef POWM_DEBUG - printf ("l=%u c=%lu\n", l, c); - mpz_mul_2exp (exp, exp, k); - mpz_add_ui (exp, exp, c); -#endif - - /* now replace xx by xx^(2^k)*x^c */ - if (c != 0) - { - j = 0; - while (c % 2 == 0) - { - j++; - c = c >> 1; - } - /* c0 = c * 2^j, i.e. xx^(2^k)*x^c = (A^(2^(k - j))*c)^(2^j) */ - l -= j; - while (l--) - if (use_redc) mpz_redc (xx, xx, xx, mod, invm); - else - { - mpz_mul (xx, xx, xx); - mpz_mod (xx, xx, mod); - } - if (use_redc) - mpz_redc (xx, xx, g[c >> 1], mod, invm); - else - { - mpz_mul (xx, xx, g[c >> 1]); - mpz_mod (xx, xx, mod); - } - } - else - j = l; /* case c=0 */ - while (j--) - { - if (use_redc) - mpz_redc (xx, xx, xx, mod, invm); - else - { - mpz_mul (xx, xx, xx); - mpz_mod (xx, xx, mod); - } - } -#ifdef POWM_DEBUG - printf ("x^"); mpz_out_str (0, 10, exp); - printf ("*2^%u mod m = ", n * BITS_PER_MP_LIMB); mpz_out_str (0, 10, xx); - putchar ('\n'); -#endif - } - - /* now convert back xx to xx/R^n */ - if (use_redc) - { - mpz_set_ui (g[0], 1); - mpz_redc (xx, xx, g[0], mod, invm); - if (mpz_cmp (xx, mod) >= 0) - mpz_sub (xx, xx, mod); - } - mpz_set (res, xx); - - mpz_clear (xx); - for (i = 0; i < K / 2; i++) - mpz_clear (g[i]); - (*_mp_free_func) (g, K / 2 * sizeof (mpz_t)); -} diff --git a/rts/gmp/mpz/powm_ui.c b/rts/gmp/mpz/powm_ui.c deleted file mode 100644 index 00f70bd..0000000 --- a/rts/gmp/mpz/powm_ui.c +++ /dev/null @@ -1,248 +0,0 @@ -/* mpz_powm_ui(res,base,exp,mod) -- Set RES to (base**exp) mod MOD. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_powm_ui (mpz_ptr res, mpz_srcptr base, unsigned long int exp, mpz_srcptr mod) -#else -mpz_powm_ui (res, base, exp, mod) - mpz_ptr res; - mpz_srcptr base; - unsigned long int exp; - mpz_srcptr mod; -#endif -{ - mp_ptr rp, mp, bp; - mp_size_t msize, bsize, rsize; - mp_size_t size; - int mod_shift_cnt; - int negative_result; - mp_limb_t *free_me = NULL; - size_t free_me_size; - TMP_DECL (marker); - - msize = ABS (mod->_mp_size); - size = 2 * msize; - - rp = res->_mp_d; - - if (msize == 0) - DIVIDE_BY_ZERO; - - if (exp == 0) - { - /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 - depending on if MOD equals 1. */ - res->_mp_size = (msize == 1 && (mod->_mp_d)[0] == 1) ? 0 : 1; - rp[0] = 1; - return; - } - - TMP_MARK (marker); - - /* Normalize MOD (i.e. make its most significant bit set) as required by - mpn_divmod. This will make the intermediate values in the calculation - slightly larger, but the correct result is obtained after a final - reduction using the original MOD value. */ - - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - count_leading_zeros (mod_shift_cnt, mod->_mp_d[msize - 1]); - if (mod_shift_cnt != 0) - mpn_lshift (mp, mod->_mp_d, msize, mod_shift_cnt); - else - MPN_COPY (mp, mod->_mp_d, msize); - - bsize = ABS (base->_mp_size); - if (bsize > msize) - { - /* The base is larger than the module. Reduce it. */ - - /* Allocate (BSIZE + 1) with space for remainder and quotient. - (The quotient is (bsize - msize + 1) limbs.) */ - bp = (mp_ptr) TMP_ALLOC ((bsize + 1) * BYTES_PER_MP_LIMB); - MPN_COPY (bp, base->_mp_d, bsize); - /* We don't care about the quotient, store it above the remainder, - at BP + MSIZE. */ - mpn_divmod (bp + msize, bp, bsize, mp, msize); - bsize = msize; - /* Canonicalize the base, since we are going to multiply with it - quite a few times. */ - MPN_NORMALIZE (bp, bsize); - } - else - bp = base->_mp_d; - - if (bsize == 0) - { - res->_mp_size = 0; - TMP_FREE (marker); - return; - } - - if (res->_mp_alloc < size) - { - /* We have to allocate more space for RES. If any of the input - parameters are identical to RES, defer deallocation of the old - space. */ - - if (rp == mp || rp == bp) - { - free_me = rp; - free_me_size = res->_mp_alloc; - } - else - (*_mp_free_func) (rp, res->_mp_alloc * BYTES_PER_MP_LIMB); - - rp = (mp_ptr) (*_mp_allocate_func) (size * BYTES_PER_MP_LIMB); - res->_mp_alloc = size; - res->_mp_d = rp; - } - else - { - /* Make BASE, EXP and MOD not overlap with RES. */ - if (rp == bp) - { - /* RES and BASE are identical. Allocate temp. space for BASE. */ - bp = (mp_ptr) TMP_ALLOC (bsize * BYTES_PER_MP_LIMB); - MPN_COPY (bp, rp, bsize); - } - if (rp == mp) - { - /* RES and MOD are identical. Allocate temporary space for MOD. */ - mp = (mp_ptr) TMP_ALLOC (msize * BYTES_PER_MP_LIMB); - MPN_COPY (mp, rp, msize); - } - } - - MPN_COPY (rp, bp, bsize); - rsize = bsize; - - { - mp_ptr xp = (mp_ptr) TMP_ALLOC (2 * (msize + 1) * BYTES_PER_MP_LIMB); - int c; - mp_limb_t e; - mp_limb_t carry_limb; - - negative_result = (exp & 1) && base->_mp_size < 0; - - e = exp; - count_leading_zeros (c, e); - e = (e << c) << 1; /* shift the exp bits to the left, lose msb */ - c = BITS_PER_MP_LIMB - 1 - c; - - /* Main loop. - - Make the result be pointed to alternately by XP and RP. This - helps us avoid block copying, which would otherwise be necessary - with the overlap restrictions of mpn_divmod. With 50% probability - the result after this loop will be in the area originally pointed - by RP (==RES->_mp_d), and with 50% probability in the area originally - pointed to by XP. */ - - while (c != 0) - { - mp_ptr tp; - mp_size_t xsize; - - mpn_mul_n (xp, rp, rp, rsize); - xsize = 2 * rsize; - xsize -= xp[xsize - 1] == 0; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - - if ((mp_limb_signed_t) e < 0) - { - mpn_mul (xp, rp, rsize, bp, bsize); - xsize = rsize + bsize; - xsize -= xp[xsize - 1] == 0; - if (xsize > msize) - { - mpn_divmod (xp + msize, xp, xsize, mp, msize); - xsize = msize; - } - - tp = rp; rp = xp; xp = tp; - rsize = xsize; - } - e <<= 1; - c--; - } - - /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT - steps. Adjust the result by reducing it with the original MOD. - - Also make sure the result is put in RES->_mp_d (where it already - might be, see above). */ - - if (mod_shift_cnt != 0) - { - carry_limb = mpn_lshift (res->_mp_d, rp, rsize, mod_shift_cnt); - rp = res->_mp_d; - if (carry_limb != 0) - { - rp[rsize] = carry_limb; - rsize++; - } - } - else - { - MPN_COPY (res->_mp_d, rp, rsize); - rp = res->_mp_d; - } - - if (rsize >= msize) - { - mpn_divmod (rp + msize, rp, rsize, mp, msize); - rsize = msize; - } - - /* Remove any leading zero words from the result. */ - if (mod_shift_cnt != 0) - mpn_rshift (rp, rp, rsize, mod_shift_cnt); - MPN_NORMALIZE (rp, rsize); - } - - if (negative_result && rsize != 0) - { - if (mod_shift_cnt != 0) - mpn_rshift (mp, mp, msize, mod_shift_cnt); - mpn_sub (rp, mp, msize, rp, rsize); - rsize = msize; - MPN_NORMALIZE (rp, rsize); - } - res->_mp_size = rsize; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/pprime_p.c b/rts/gmp/mpz/pprime_p.c deleted file mode 100644 index 82eb678..0000000 --- a/rts/gmp/mpz/pprime_p.c +++ /dev/null @@ -1,242 +0,0 @@ -/* mpz_probab_prime_p -- - An implementation of the probabilistic primality test found in Knuth's - Seminumerical Algorithms book. If the function mpz_probab_prime_p() - returns 0 then n is not prime. If it returns 1, then n is 'probably' - prime. If it returns 2, n is surely prime. The probability of a false - positive is (1/4)**reps, where reps is the number of internal passes of the - probabilistic algorithm. Knuth indicates that 25 passes are reasonable. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998, 1999, 2000 Free Software -Foundation, Inc. Miller-Rabin code contributed by John Amanatides. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -static int isprime _PROTO ((unsigned long int t)); -static int mpz_millerrabin _PROTO ((mpz_srcptr n, int reps)); - -int -#if __STDC__ -mpz_probab_prime_p (mpz_srcptr n, int reps) -#else -mpz_probab_prime_p (n, reps) - mpz_srcptr n; - int reps; -#endif -{ - mp_limb_t r; - - /* Handle small and negative n. */ - if (mpz_cmp_ui (n, 1000000L) <= 0) - { - int is_prime; - if (mpz_sgn (n) < 0) - { - /* Negative number. Negate and call ourselves. */ - mpz_t n2; - mpz_init (n2); - mpz_neg (n2, n); - is_prime = mpz_probab_prime_p (n2, reps); - mpz_clear (n2); - return is_prime; - } - is_prime = isprime (mpz_get_ui (n)); - return is_prime ? 2 : 0; - } - - /* If n is now even, it is not a prime. */ - if ((mpz_get_ui (n) & 1) == 0) - return 0; - - /* Check if n has small factors. */ - if (UDIV_TIME > (2 * UMUL_TIME + 6)) - r = mpn_preinv_mod_1 (PTR(n), SIZ(n), (mp_limb_t) PP, (mp_limb_t) PP_INVERTED); - else - r = mpn_mod_1 (PTR(n), SIZ(n), (mp_limb_t) PP); - if (r % 3 == 0 || r % 5 == 0 || r % 7 == 0 || r % 11 == 0 || r % 13 == 0 - || r % 17 == 0 || r % 19 == 0 || r % 23 == 0 || r % 29 == 0 -#if BITS_PER_MP_LIMB == 64 - || r % 31 == 0 || r % 37 == 0 || r % 41 == 0 || r % 43 == 0 - || r % 47 == 0 || r % 53 == 0 -#endif - ) - { - return 0; - } - - /* Do more dividing. We collect small primes, using umul_ppmm, until we - overflow a single limb. We divide our number by the small primes product, - and look for factors in the remainder. */ - { - unsigned long int ln2; - unsigned long int q; - mp_limb_t p1, p0, p; - unsigned int primes[15]; - int nprimes; - - nprimes = 0; - p = 1; - ln2 = mpz_sizeinbase (n, 2) / 30; ln2 = ln2 * ln2; - for (q = BITS_PER_MP_LIMB == 64 ? 59 : 31; q < ln2; q += 2) - { - if (isprime (q)) - { - umul_ppmm (p1, p0, p, q); - if (p1 != 0) - { - r = mpn_mod_1 (PTR(n), SIZ(n), p); - while (--nprimes >= 0) - if (r % primes[nprimes] == 0) - { - if (mpn_mod_1 (PTR(n), SIZ(n), (mp_limb_t) primes[nprimes]) != 0) - abort (); - return 0; - } - p = q; - nprimes = 0; - } - else - { - p = p0; - } - primes[nprimes++] = q; - } - } - } - - /* Perform a number of Miller-Rabin tests. */ - return mpz_millerrabin (n, reps); -} - -static int -#if __STDC__ -isprime (unsigned long int t) -#else -isprime (t) - unsigned long int t; -#endif -{ - unsigned long int q, r, d; - - if (t < 3 || (t & 1) == 0) - return t == 2; - - for (d = 3, r = 1; r != 0; d += 2) - { - q = t / d; - r = t - q * d; - if (q < d) - return 1; - } - return 0; -} - -static int millerrabin _PROTO ((mpz_srcptr n, mpz_srcptr nm1, - mpz_ptr x, mpz_ptr y, - mpz_srcptr q, unsigned long int k)); - -static int -#if __STDC__ -mpz_millerrabin (mpz_srcptr n, int reps) -#else -mpz_millerrabin (n, reps) - mpz_srcptr n; - int reps; -#endif -{ - int r; - mpz_t nm1, x, y, q; - unsigned long int k; - gmp_randstate_t rstate; - int is_prime; - TMP_DECL (marker); - TMP_MARK (marker); - - MPZ_TMP_INIT (nm1, SIZ (n) + 1); - mpz_sub_ui (nm1, n, 1L); - - MPZ_TMP_INIT (x, SIZ (n)); - MPZ_TMP_INIT (y, 2 * SIZ (n)); /* mpz_powm_ui needs excessive memory!!! */ - - /* Perform a Fermat test. */ - mpz_set_ui (x, 210L); - mpz_powm (y, x, nm1, n); - if (mpz_cmp_ui (y, 1L) != 0) - { - TMP_FREE (marker); - return 0; - } - - MPZ_TMP_INIT (q, SIZ (n)); - - /* Find q and k, where q is odd and n = 1 + 2**k * q. */ - k = mpz_scan1 (nm1, 0L); - mpz_tdiv_q_2exp (q, nm1, k); - - gmp_randinit (rstate, GMP_RAND_ALG_DEFAULT, 32L); - - is_prime = 1; - for (r = 0; r < reps && is_prime; r++) - { - do - mpz_urandomb (x, rstate, mpz_sizeinbase (n, 2) - 1); - while (mpz_cmp_ui (x, 1L) <= 0); - - is_prime = millerrabin (n, nm1, x, y, q, k); - } - - gmp_randclear (rstate); - - TMP_FREE (marker); - return is_prime; -} - -static int -#if __STDC__ -millerrabin (mpz_srcptr n, mpz_srcptr nm1, mpz_ptr x, mpz_ptr y, - mpz_srcptr q, unsigned long int k) -#else -millerrabin (n, nm1, x, y, q, k) - mpz_srcptr n; - mpz_srcptr nm1; - mpz_ptr x; - mpz_ptr y; - mpz_srcptr q; - unsigned long int k; -#endif -{ - unsigned long int i; - - mpz_powm (y, x, q, n); - - if (mpz_cmp_ui (y, 1L) == 0 || mpz_cmp (y, nm1) == 0) - return 1; - - for (i = 1; i < k; i++) - { - mpz_powm_ui (y, y, 2L, n); - if (mpz_cmp (y, nm1) == 0) - return 1; - if (mpz_cmp_ui (y, 1L) == 0) - return 0; - } - return 0; -} diff --git a/rts/gmp/mpz/random.c b/rts/gmp/mpz/random.c deleted file mode 100644 index 60d9113..0000000 --- a/rts/gmp/mpz/random.c +++ /dev/null @@ -1,56 +0,0 @@ -/* mpz_random -- Generate a random mpz_t of specified size. - This function is non-portable and generates poor random numbers. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "urandom.h" - -void -#if __STDC__ -mpz_random (mpz_ptr x, mp_size_t size) -#else -mpz_random (x, size) - mpz_ptr x; - mp_size_t size; -#endif -{ - mp_size_t i; - mp_limb_t ran; - mp_ptr xp; - mp_size_t abs_size; - - abs_size = ABS (size); - - if (x->_mp_alloc < abs_size) - _mpz_realloc (x, abs_size); - - xp = x->_mp_d; - - for (i = 0; i < abs_size; i++) - { - ran = urandom (); - xp[i] = ran; - } - - MPN_NORMALIZE (xp, abs_size); - x->_mp_size = size < 0 ? -abs_size : abs_size; -} diff --git a/rts/gmp/mpz/random2.c b/rts/gmp/mpz/random2.c deleted file mode 100644 index a90af11..0000000 --- a/rts/gmp/mpz/random2.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_random2 -- Generate a positive random mpz_t of specified size, with - long runs of consecutive ones and zeros in the binary representation. - Meant for testing of other MP routines. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_random2 (mpz_ptr x, mp_size_t size) -#else -mpz_random2 (x, size) - mpz_ptr x; - mp_size_t size; -#endif -{ - mp_size_t abs_size; - - abs_size = ABS (size); - if (abs_size != 0) - { - if (x->_mp_alloc < abs_size) - _mpz_realloc (x, abs_size); - - mpn_random2 (x->_mp_d, abs_size); - } - - x->_mp_size = size; -} diff --git a/rts/gmp/mpz/realloc.c b/rts/gmp/mpz/realloc.c deleted file mode 100644 index 0b9e447..0000000 --- a/rts/gmp/mpz/realloc.c +++ /dev/null @@ -1,52 +0,0 @@ -/* _mpz_realloc -- make the mpz_t have NEW_SIZE digits allocated. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void * -#if __STDC__ -_mpz_realloc (mpz_ptr m, mp_size_t new_size) -#else -_mpz_realloc (m, new_size) - mpz_ptr m; - mp_size_t new_size; -#endif -{ - /* Never allocate zero space. */ - if (new_size == 0) - new_size = 1; - - m->_mp_d = (mp_ptr) (*_mp_reallocate_func) (m->_mp_d, - m->_mp_alloc * BYTES_PER_MP_LIMB, - new_size * BYTES_PER_MP_LIMB); - m->_mp_alloc = new_size; - -#if 0 - /* This might break some code that reads the size field after - reallocation, in the case the reallocated destination and a - source argument are identical. */ - if (ABS (m->_mp_size) > new_size) - m->_mp_size = 0; -#endif - - return (void *) m->_mp_d; -} diff --git a/rts/gmp/mpz/remove.c b/rts/gmp/mpz/remove.c deleted file mode 100644 index bc6675f..0000000 --- a/rts/gmp/mpz/remove.c +++ /dev/null @@ -1,93 +0,0 @@ -/* mpz_remove -- divide out a factor and return its multiplicity. - -Copyright (C) 1998, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_remove (mpz_ptr dest, mpz_srcptr src, mpz_srcptr f) -#else -mpz_remove (dest, src, f) - mpz_ptr dest; - mpz_srcptr src; - mpz_srcptr f; -#endif -{ - mpz_t fpow[40]; /* inexhaustible...until year 2020 or so */ - mpz_t x, rem; - unsigned long int pwr; - int p; - - if (mpz_cmp_ui (f, 1) <= 0 || mpz_sgn (src) == 0) - DIVIDE_BY_ZERO; - if (mpz_cmp_ui (f, 2) == 0) - { - unsigned long int s0; - s0 = mpz_scan1 (src, 0); - mpz_div_2exp (dest, src, s0); - return s0; - } - - /* We could perhaps compute mpz_scan1(src,0)/mpz_scan1(f,0). It is an - upper bound of the result we're seeking. We could also shift down the - operands so that they become odd, to make intermediate values smaller. */ - - mpz_init (rem); - mpz_init (x); - - pwr = 0; - mpz_init (fpow[0]); - mpz_set (fpow[0], f); - mpz_set (dest, src); - - /* Divide by f, f^2, ..., f^(2^k) until we get a remainder for f^(2^k). */ - for (p = 0;; p++) - { - mpz_tdiv_qr (x, rem, dest, fpow[p]); - if (SIZ (rem) != 0) - break; - mpz_init (fpow[p + 1]); - mpz_mul (fpow[p + 1], fpow[p], fpow[p]); - mpz_set (dest, x); - } - - pwr = (1 << p) - 1; - - mpz_clear (fpow[p]); - - /* Divide by f^(2^(k-1)), f^(2^(k-2)), ..., f for all divisors that give a - zero remainder. */ - while (--p >= 0) - { - mpz_tdiv_qr (x, rem, dest, fpow[p]); - if (SIZ (rem) == 0) - { - pwr += 1 << p; - mpz_set (dest, x); - } - mpz_clear (fpow[p]); - } - - mpz_clear (x); - mpz_clear (rem); - return pwr; -} diff --git a/rts/gmp/mpz/root.c b/rts/gmp/mpz/root.c deleted file mode 100644 index 0920bf2..0000000 --- a/rts/gmp/mpz/root.c +++ /dev/null @@ -1,183 +0,0 @@ -/* mpz_root(root, u, nth) -- Set ROOT to floor(U^(1/nth)). - Return an indication if the result is exact. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -/* Naive implementation of nth root extraction. It would probably be a - better idea to use a division-free Newton iteration. It is insane - to use full precision from iteration 1. The mpz_scan1 trick compensates - to some extent. It would be natural to avoid representing the low zero - bits mpz_scan1 is counting, and at the same time call mpn directly. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -int -#if __STDC__ -mpz_root (mpz_ptr r, mpz_srcptr c, unsigned long int nth) -#else -mpz_root (r, c, nth) - mpz_ptr r; - mpz_srcptr c; - unsigned long int nth; -#endif -{ - mpz_t x, t0, t1, t2; - __mpz_struct ccs, *cc = &ccs; - unsigned long int nbits; - int bit; - int exact; - int i; - unsigned long int lowz; - unsigned long int rl; - - /* even roots of negatives provoke an exception */ - if (mpz_sgn (c) < 0 && (nth & 1) == 0) - SQRT_OF_NEGATIVE; - - /* root extraction interpreted as c^(1/nth) means a zeroth root should - provoke a divide by zero, do this even if c==0 */ - if (nth == 0) - DIVIDE_BY_ZERO; - - if (mpz_sgn (c) == 0) - { - if (r != NULL) - mpz_set_ui (r, 0); - return 1; /* exact result */ - } - - PTR(cc) = PTR(c); - SIZ(cc) = ABSIZ(c); - - nbits = (mpz_sizeinbase (cc, 2) - 1) / nth; - if (nbits == 0) - { - if (r != NULL) - mpz_set_ui (r, 1); - if (mpz_sgn (c) < 0) - { - if (r != NULL) - SIZ(r) = -SIZ(r); - return mpz_cmp_si (c, -1L) == 0; - } - return mpz_cmp_ui (c, 1L) == 0; - } - - mpz_init (x); - mpz_init (t0); - mpz_init (t1); - mpz_init (t2); - - /* Create a one-bit approximation. */ - mpz_set_ui (x, 0); - mpz_setbit (x, nbits); - - /* Make the approximation better, one bit at a time. This odd-looking - termination criteria makes large nth get better initial approximation, - which avoids slow convergence for such values. */ - bit = nbits - 1; - for (i = 1; (nth >> i) != 0; i++) - { - mpz_setbit (x, bit); - mpz_tdiv_q_2exp (t0, x, bit); - mpz_pow_ui (t1, t0, nth); - mpz_mul_2exp (t1, t1, bit * nth); - if (mpz_cmp (cc, t1) < 0) - mpz_clrbit (x, bit); - - bit--; /* check/set next bit */ - if (bit < 0) - { - /* We're done. */ - mpz_pow_ui (t1, x, nth); - goto done; - } - } - mpz_setbit (x, bit); - mpz_set_ui (t2, 0); mpz_setbit (t2, bit); mpz_add (x, x, t2); - -#if DEBUG - /* Check that the starting approximation is >= than the root. */ - mpz_pow_ui (t1, x, nth); - if (mpz_cmp (cc, t1) >= 0) - abort (); -#endif - - mpz_add_ui (x, x, 1); - - /* Main loop */ - do - { - lowz = mpz_scan1 (x, 0); - mpz_tdiv_q_2exp (t0, x, lowz); - mpz_pow_ui (t1, t0, nth - 1); - mpz_mul_2exp (t1, t1, lowz * (nth - 1)); - mpz_tdiv_q (t2, cc, t1); - mpz_sub (t2, x, t2); - rl = mpz_tdiv_q_ui (t2, t2, nth); - mpz_sub (x, x, t2); - } - while (mpz_sgn (t2) != 0); - - /* If we got a non-zero remainder in the last division, we know our root - is too large. */ - mpz_sub_ui (x, x, (mp_limb_t) (rl != 0)); - - /* Adjustment loop. If we spend more care on rounding in the loop above, - we could probably get rid of this, or greatly simplify it. */ - { - int bad = 0; - lowz = mpz_scan1 (x, 0); - mpz_tdiv_q_2exp (t0, x, lowz); - mpz_pow_ui (t1, t0, nth); - mpz_mul_2exp (t1, t1, lowz * nth); - while (mpz_cmp (cc, t1) < 0) - { - bad++; - if (bad > 2) - abort (); /* abort if our root is far off */ - mpz_sub_ui (x, x, 1); - lowz = mpz_scan1 (x, 0); - mpz_tdiv_q_2exp (t0, x, lowz); - mpz_pow_ui (t1, t0, nth); - mpz_mul_2exp (t1, t1, lowz * nth); - } - } - - done: - exact = mpz_cmp (t1, cc) == 0; - - if (r != NULL) - { - mpz_set (r, x); - if (mpz_sgn (c) < 0) - SIZ(r) = -SIZ(r); - } - - mpz_clear (t2); - mpz_clear (t1); - mpz_clear (t0); - mpz_clear (x); - - return exact; -} diff --git a/rts/gmp/mpz/rrandomb.c b/rts/gmp/mpz/rrandomb.c deleted file mode 100644 index 7d78243..0000000 --- a/rts/gmp/mpz/rrandomb.c +++ /dev/null @@ -1,117 +0,0 @@ -/* mpz_rrandomb -- Generate a positive random mpz_t of specified bit size, with - long runs of consecutive ones and zeros in the binary representation. - Meant for testing of other MP routines. - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -static void gmp_rrandomb _PROTO ((mp_ptr rp, gmp_randstate_t rstate, unsigned long int nbits)); - -void -#if __STDC__ -mpz_rrandomb (mpz_ptr x, gmp_randstate_t rstate, unsigned long int nbits) -#else -mpz_rrandomb (x, rstate, nbits) - mpz_ptr x; - gmp_randstate_t rstate; - unsigned long int nbits; -#endif -{ - mp_size_t nl = 0; - - if (nbits != 0) - { - mp_ptr xp; - nl = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - if (x->_mp_alloc < nl) - _mpz_realloc (x, nl); - - xp = PTR(x); - gmp_rrandomb (xp, rstate, nbits); - MPN_NORMALIZE (xp, nl); - } - - SIZ(x) = nl; -} - -#define BITS_PER_CHUNK 4 - -static void -#if __STDC__ -gmp_rrandomb (mp_ptr rp, gmp_randstate_t rstate, unsigned long int nbits) -#else -gmp_rrandomb (rp, rstate, nbits) - mp_ptr rp; - gmp_randstate_t rstate; - unsigned long int nbits; -#endif -{ - int nb; - int bit_pos; - mp_size_t limb_pos; - mp_limb_t ran, ranm; - mp_limb_t acc; - mp_size_t n; - - bit_pos = nbits % BITS_PER_MP_LIMB; - limb_pos = nbits / BITS_PER_MP_LIMB; - if (bit_pos == 0) - { - bit_pos = BITS_PER_MP_LIMB; - limb_pos--; - } - - acc = 0; - while (limb_pos >= 0) - { - _gmp_rand (&ranm, rstate, BITS_PER_CHUNK + 1); - ran = ranm; - nb = (ran >> 1) + 1; - if ((ran & 1) != 0) - { - /* Generate a string of ones. */ - if (nb > bit_pos) - { - rp[limb_pos--] = acc | ((((mp_limb_t) 1) << bit_pos) - 1); - bit_pos += BITS_PER_MP_LIMB; - bit_pos -= nb; - acc = (~(mp_limb_t) 0) << bit_pos; - } - else - { - bit_pos -= nb; - acc |= ((((mp_limb_t) 1) << nb) - 1) << bit_pos; - } - } - else - { - /* Generate a string of zeroes. */ - if (nb > bit_pos) - { - rp[limb_pos--] = acc; - acc = 0; - bit_pos += BITS_PER_MP_LIMB; - } - bit_pos -= nb; - } - } -} diff --git a/rts/gmp/mpz/scan0.c b/rts/gmp/mpz/scan0.c deleted file mode 100644 index 6c59cf8..0000000 --- a/rts/gmp/mpz/scan0.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_scan0(op, startbit) -- Scan for the next set bit, starting at startbit. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_scan0 (mpz_srcptr u, unsigned long int starting_bit) -#else -mpz_scan0 (u, starting_bit) - mpz_srcptr u; - unsigned long int starting_bit; -#endif -{ - return mpn_scan0 (u->_mp_d, starting_bit); -} diff --git a/rts/gmp/mpz/scan1.c b/rts/gmp/mpz/scan1.c deleted file mode 100644 index 3b84e34..0000000 --- a/rts/gmp/mpz/scan1.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_scan1(op, startbit) -- Scan for the next set bit, starting at startbit. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_scan1 (mpz_srcptr u, unsigned long int starting_bit) -#else -mpz_scan1 (u, starting_bit) - mpz_srcptr u; - unsigned long int starting_bit; -#endif -{ - return mpn_scan1 (u->_mp_d, starting_bit); -} diff --git a/rts/gmp/mpz/set.c b/rts/gmp/mpz/set.c deleted file mode 100644 index 06b2eef..0000000 --- a/rts/gmp/mpz/set.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_set (dest_integer, src_integer) -- Assign DEST_INTEGER from SRC_INTEGER. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set (mpz_ptr w, mpz_srcptr u) -#else -mpz_set (w, u) - mpz_ptr w; - mpz_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - - usize = u->_mp_size; - size = ABS (usize); - - if (w->_mp_alloc < size) - _mpz_realloc (w, size); - - wp = w->_mp_d; - up = u->_mp_d; - - MPN_COPY (wp, up, size); - w->_mp_size = usize; -} diff --git a/rts/gmp/mpz/set_d.c b/rts/gmp/mpz/set_d.c deleted file mode 100644 index e90ed9b..0000000 --- a/rts/gmp/mpz/set_d.c +++ /dev/null @@ -1,96 +0,0 @@ -/* mpz_set_d(integer, val) -- Assign INTEGER with a double value VAL. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_d (mpz_ptr r, double d) -#else -mpz_set_d (r, d) - mpz_ptr r; - double d; -#endif -{ - int negative; - mp_limb_t tp[3]; - mp_ptr rp; - mp_size_t rn; - - negative = d < 0; - d = ABS (d); - - /* Handle small arguments quickly. */ - if (d < MP_BASE_AS_DOUBLE) - { - mp_limb_t tmp; - tmp = d; - PTR(r)[0] = tmp; - SIZ(r) = negative ? -(tmp != 0) : (tmp != 0); - return; - } - - rn = __gmp_extract_double (tp, d); - - if (ALLOC(r) < rn) - _mpz_realloc (r, rn); - - rp = PTR (r); - -#if BITS_PER_MP_LIMB == 32 - switch (rn) - { - default: - MPN_ZERO (rp, rn - 3); - rp += rn - 3; - /* fall through */ - case 3: - rp[2] = tp[2]; - rp[1] = tp[1]; - rp[0] = tp[0]; - break; - case 2: - rp[1] = tp[2]; - rp[0] = tp[1]; - break; - case 1: - /* handled in "small aguments" case above */ - abort (); - } -#else - switch (rn) - { - default: - MPN_ZERO (rp, rn - 2); - rp += rn - 2; - /* fall through */ - case 2: - rp[1] = tp[1], rp[0] = tp[0]; - break; - case 1: - /* handled in "small aguments" case above */ - abort (); - } -#endif - - SIZ(r) = negative ? -rn : rn; -} diff --git a/rts/gmp/mpz/set_f.c b/rts/gmp/mpz/set_f.c deleted file mode 100644 index 2273953..0000000 --- a/rts/gmp/mpz/set_f.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_set_f (dest_integer, src_float) -- Assign DEST_INTEGER from SRC_FLOAT. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_f (mpz_ptr w, mpf_srcptr u) -#else -mpz_set_f (w, u) - mpz_ptr w; - mpf_srcptr u; -#endif -{ - mp_ptr wp, up; - mp_size_t usize, size; - mp_exp_t exp; - - usize = SIZ (u); - size = ABS (usize); - exp = EXP (u); - - if (w->_mp_alloc < exp) - _mpz_realloc (w, exp); - - wp = w->_mp_d; - up = u->_mp_d; - - if (exp <= 0) - { - SIZ (w) = 0; - return; - } - if (exp < size) - { - MPN_COPY (wp, up + size - exp, exp); - } - else - { - MPN_ZERO (wp, exp - size); - MPN_COPY (wp + exp - size, up, size); - } - - w->_mp_size = usize >= 0 ? exp : -exp; -} diff --git a/rts/gmp/mpz/set_q.c b/rts/gmp/mpz/set_q.c deleted file mode 100644 index 72d3222..0000000 --- a/rts/gmp/mpz/set_q.c +++ /dev/null @@ -1,36 +0,0 @@ -/* mpz_set_q (dest_integer, src_rational) -- Assign DEST_INTEGER from - SRC_rational. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_q (mpz_ptr w, mpq_srcptr u) -#else -mpz_set_q (w, u) - mpz_ptr w; - mpq_srcptr u; -#endif -{ - mpz_tdiv_q (w, mpq_numref (u), mpq_denref (u)); -} diff --git a/rts/gmp/mpz/set_si.c b/rts/gmp/mpz/set_si.c deleted file mode 100644 index 9ba2fba..0000000 --- a/rts/gmp/mpz/set_si.c +++ /dev/null @@ -1,48 +0,0 @@ -/* mpz_set_si(integer, val) -- Assign INTEGER with a small value VAL. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_si (mpz_ptr dest, signed long int val) -#else -mpz_set_si (dest, val) - mpz_ptr dest; - signed long int val; -#endif -{ - /* We don't check if the allocation is enough, since the rest of the - package ensures it's at least 1, which is what we need here. */ - if (val > 0) - { - dest->_mp_d[0] = val; - dest->_mp_size = 1; - } - else if (val < 0) - { - dest->_mp_d[0] = (unsigned long) -val; - dest->_mp_size = -1; - } - else - dest->_mp_size = 0; -} diff --git a/rts/gmp/mpz/set_str.c b/rts/gmp/mpz/set_str.c deleted file mode 100644 index 3ab79c0..0000000 --- a/rts/gmp/mpz/set_str.c +++ /dev/null @@ -1,157 +0,0 @@ -/* mpz_set_str(mp_dest, string, base) -- Convert the \0-terminated - string STRING in base BASE to multiple precision integer in - MP_DEST. Allow white space in the string. If BASE == 0 determine - the base in the C standard way, i.e. 0xhh...h means base 16, - 0oo...o means base 8, otherwise assume base 10. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include -#include -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -static int -#if __STDC__ -digit_value_in_base (int c, int base) -#else -digit_value_in_base (c, base) - int c; - int base; -#endif -{ - int digit; - - if (isdigit (c)) - digit = c - '0'; - else if (islower (c)) - digit = c - 'a' + 10; - else if (isupper (c)) - digit = c - 'A' + 10; - else - return -1; - - if (digit < base) - return digit; - return -1; -} - -int -#if __STDC__ -mpz_set_str (mpz_ptr x, const char *str, int base) -#else -mpz_set_str (x, str, base) - mpz_ptr x; - const char *str; - int base; -#endif -{ - size_t str_size; - char *s, *begs; - size_t i; - mp_size_t xsize; - int c; - int negative; - TMP_DECL (marker); - - /* Skip whitespace. */ - do - c = *str++; - while (isspace (c)); - - negative = 0; - if (c == '-') - { - negative = 1; - c = *str++; - } - - if (digit_value_in_base (c, base == 0 ? 10 : base) < 0) - return -1; /* error if no digits */ - - /* If BASE is 0, try to find out the base by looking at the initial - characters. */ - if (base == 0) - { - base = 10; - if (c == '0') - { - base = 8; - c = *str++; - if (c == 'x' || c == 'X') - { - base = 16; - c = *str++; - } - else if (c == 'b' || c == 'B') - { - base = 2; - c = *str++; - } - } - } - - /* Skip leading zeros. */ - while (c == '0') - c = *str++; - /* Make sure the string does not become empty, mpn_set_str would fail. */ - if (c == 0) - { - x->_mp_size = 0; - return 0; - } - - TMP_MARK (marker); - str_size = strlen (str - 1); - s = begs = (char *) TMP_ALLOC (str_size + 1); - - /* Remove spaces from the string and convert the result from ASCII to a - byte array. */ - for (i = 0; i < str_size; i++) - { - if (!isspace (c)) - { - int dig = digit_value_in_base (c, base); - if (dig < 0) - { - TMP_FREE (marker); - return -1; - } - *s++ = dig; - } - c = *str++; - } - - str_size = s - begs; - - xsize = (((mp_size_t) (str_size / __mp_bases[base].chars_per_bit_exactly)) - / BITS_PER_MP_LIMB + 2); - if (x->_mp_alloc < xsize) - _mpz_realloc (x, xsize); - - /* Convert the byte array in base BASE to our bignum format. */ - xsize = mpn_set_str (x->_mp_d, (unsigned char *) begs, str_size, base); - x->_mp_size = negative ? -xsize : xsize; - - TMP_FREE (marker); - return 0; -} diff --git a/rts/gmp/mpz/set_ui.c b/rts/gmp/mpz/set_ui.c deleted file mode 100644 index d6097c1..0000000 --- a/rts/gmp/mpz/set_ui.c +++ /dev/null @@ -1,43 +0,0 @@ -/* mpz_set_ui(integer, val) -- Assign INTEGER with a small value VAL. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_set_ui (mpz_ptr dest, unsigned long int val) -#else -mpz_set_ui (dest, val) - mpz_ptr dest; - unsigned long int val; -#endif -{ - /* We don't check if the allocation is enough, since the rest of the - package ensures it's at least 1, which is what we need here. */ - if (val > 0) - { - dest->_mp_d[0] = val; - dest->_mp_size = 1; - } - else - dest->_mp_size = 0; -} diff --git a/rts/gmp/mpz/setbit.c b/rts/gmp/mpz/setbit.c deleted file mode 100644 index d4249a4..0000000 --- a/rts/gmp/mpz/setbit.c +++ /dev/null @@ -1,119 +0,0 @@ -/* mpz_setbit -- set a specified bit. - -Copyright (C) 1991, 1993, 1994, 1995, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_setbit (mpz_ptr d, unsigned long int bit_index) -#else -mpz_setbit (d, bit_index) - mpz_ptr d; - unsigned long int bit_index; -#endif -{ - mp_size_t dsize = d->_mp_size; - mp_ptr dp = d->_mp_d; - mp_size_t limb_index; - - limb_index = bit_index / BITS_PER_MP_LIMB; - if (dsize >= 0) - { - if (limb_index < dsize) - { - dp[limb_index] |= (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = dsize; - } - else - { - /* Ugh. The bit should be set outside of the end of the - number. We have to increase the size of the number. */ - if (d->_mp_alloc < limb_index + 1) - { - _mpz_realloc (d, limb_index + 1); - dp = d->_mp_d; - } - MPN_ZERO (dp + dsize, limb_index - dsize); - dp[limb_index] = (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB); - d->_mp_size = limb_index + 1; - } - } - else - { - mp_size_t zero_bound; - - /* Simulate two's complement arithmetic, i.e. simulate - 1. Set OP = ~(OP - 1) [with infinitely many leading ones]. - 2. Set the bit. - 3. Set OP = ~OP + 1. */ - - dsize = -dsize; - - /* No upper bound on this loop, we're sure there's a non-zero limb - sooner ot later. */ - for (zero_bound = 0; ; zero_bound++) - if (dp[zero_bound] != 0) - break; - - if (limb_index > zero_bound) - { - if (limb_index < dsize) - dp[limb_index] &= ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB)); - else - ; - } - else if (limb_index == zero_bound) - { - dp[limb_index] = ((dp[limb_index] - 1) - & ~((mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB))) + 1; - if (dp[limb_index] == 0) - { - mp_size_t i; - for (i = limb_index + 1; i < dsize; i++) - { - dp[i] += 1; - if (dp[i] != 0) - goto fin; - } - /* We got carry all way out beyond the end of D. Increase - its size (and allocation if necessary). */ - dsize++; - if (d->_mp_alloc < dsize) - { - _mpz_realloc (d, dsize); - dp = d->_mp_d; - } - dp[i] = 1; - d->_mp_size = -dsize; - fin:; - } - } - else - { - mpn_decr_u (dp + limb_index, - (mp_limb_t) 1 << (bit_index % BITS_PER_MP_LIMB)); - dsize -= dp[dsize - 1] == 0; - d->_mp_size = -dsize; - } - } -} diff --git a/rts/gmp/mpz/size.c b/rts/gmp/mpz/size.c deleted file mode 100644 index 6574756..0000000 --- a/rts/gmp/mpz/size.c +++ /dev/null @@ -1,35 +0,0 @@ -/* mpz_size(x) -- return the number of lims currently used by the - value of integer X. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -size_t -#if __STDC__ -mpz_size (mpz_srcptr x) -#else -mpz_size (x) - mpz_srcptr x; -#endif -{ - return ABS (x->_mp_size); -} diff --git a/rts/gmp/mpz/sizeinbase.c b/rts/gmp/mpz/sizeinbase.c deleted file mode 100644 index 734f9c4..0000000 --- a/rts/gmp/mpz/sizeinbase.c +++ /dev/null @@ -1,60 +0,0 @@ -/* mpz_sizeinbase(x, base) -- return an approximation to the number of - character the integer X would have printed in base BASE. The - approximation is never too small. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -size_t -#if __STDC__ -mpz_sizeinbase (mpz_srcptr x, int base) -#else -mpz_sizeinbase (x, base) - mpz_srcptr x; - int base; -#endif -{ - mp_size_t size = ABS (x->_mp_size); - int lb_base, cnt; - size_t totbits; - - /* Special case for X == 0. */ - if (size == 0) - return 1; - - /* Calculate the total number of significant bits of X. */ - count_leading_zeros (cnt, x->_mp_d[size - 1]); - totbits = size * BITS_PER_MP_LIMB - cnt; - - if ((base & (base - 1)) == 0) - { - /* Special case for powers of 2, giving exact result. */ - - count_leading_zeros (lb_base, base); - lb_base = BITS_PER_MP_LIMB - lb_base - 1; - - return (totbits + lb_base - 1) / lb_base; - } - else - return (size_t) (totbits * __mp_bases[base].chars_per_bit_exactly) + 1; -} diff --git a/rts/gmp/mpz/sqrt.c b/rts/gmp/mpz/sqrt.c deleted file mode 100644 index fe82fe4..0000000 --- a/rts/gmp/mpz/sqrt.c +++ /dev/null @@ -1,86 +0,0 @@ -/* mpz_sqrt(root, u) -- Set ROOT to floor(sqrt(U)). - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_sqrt (mpz_ptr root, mpz_srcptr op) -#else -mpz_sqrt (root, op) - mpz_ptr root; - mpz_srcptr op; -#endif -{ - mp_size_t op_size, root_size; - mp_ptr root_ptr, op_ptr; - mp_ptr free_me = NULL; - mp_size_t free_me_size; - TMP_DECL (marker); - - TMP_MARK (marker); - op_size = op->_mp_size; - if (op_size < 0) - SQRT_OF_NEGATIVE; - - /* The size of the root is accurate after this simple calculation. */ - root_size = (op_size + 1) / 2; - - root_ptr = root->_mp_d; - op_ptr = op->_mp_d; - - if (root->_mp_alloc < root_size) - { - if (root_ptr == op_ptr) - { - free_me = root_ptr; - free_me_size = root->_mp_alloc; - } - else - (*_mp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB); - - root->_mp_alloc = root_size; - root_ptr = (mp_ptr) (*_mp_allocate_func) (root_size * BYTES_PER_MP_LIMB); - root->_mp_d = root_ptr; - } - else - { - /* Make OP not overlap with ROOT. */ - if (root_ptr == op_ptr) - { - /* ROOT and OP are identical. Allocate temporary space for OP. */ - op_ptr = (mp_ptr) TMP_ALLOC (op_size * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. Hack: Avoid temporary variable - by using ROOT_PTR. */ - MPN_COPY (op_ptr, root_ptr, op_size); - } - } - - mpn_sqrtrem (root_ptr, NULL, op_ptr, op_size); - - root->_mp_size = root_size; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/sqrtrem.c b/rts/gmp/mpz/sqrtrem.c deleted file mode 100644 index 99a6453..0000000 --- a/rts/gmp/mpz/sqrtrem.c +++ /dev/null @@ -1,111 +0,0 @@ -/* mpz_sqrtrem(root,rem,x) -- Set ROOT to floor(sqrt(X)) and REM - to the remainder, i.e. X - ROOT**2. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#include "gmp.h" -#include "gmp-impl.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_sqrtrem (mpz_ptr root, mpz_ptr rem, mpz_srcptr op) -#else -mpz_sqrtrem (root, rem, op) - mpz_ptr root; - mpz_ptr rem; - mpz_srcptr op; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -msqrt (mpz_srcptr op, mpz_ptr root, mpz_ptr rem) -#else -msqrt (op, root, rem) - mpz_srcptr op; - mpz_ptr root; - mpz_ptr rem; -#endif -#endif /* BERKELEY_MP */ -{ - mp_size_t op_size, root_size, rem_size; - mp_ptr root_ptr, op_ptr; - mp_ptr free_me = NULL; - mp_size_t free_me_size; - TMP_DECL (marker); - - TMP_MARK (marker); - op_size = op->_mp_size; - if (op_size < 0) - SQRT_OF_NEGATIVE; - - if (rem->_mp_alloc < op_size) - _mpz_realloc (rem, op_size); - - /* The size of the root is accurate after this simple calculation. */ - root_size = (op_size + 1) / 2; - - root_ptr = root->_mp_d; - op_ptr = op->_mp_d; - - if (root->_mp_alloc < root_size) - { - if (root_ptr == op_ptr) - { - free_me = root_ptr; - free_me_size = root->_mp_alloc; - } - else - (*_mp_free_func) (root_ptr, root->_mp_alloc * BYTES_PER_MP_LIMB); - - root->_mp_alloc = root_size; - root_ptr = (mp_ptr) (*_mp_allocate_func) (root_size * BYTES_PER_MP_LIMB); - root->_mp_d = root_ptr; - } - else - { - /* Make OP not overlap with ROOT. */ - if (root_ptr == op_ptr) - { - /* ROOT and OP are identical. Allocate temporary space for OP. */ - op_ptr = (mp_ptr) TMP_ALLOC (op_size * BYTES_PER_MP_LIMB); - /* Copy to the temporary space. Hack: Avoid temporary variable - by using ROOT_PTR. */ - MPN_COPY (op_ptr, root_ptr, op_size); - } - } - - rem_size = mpn_sqrtrem (root_ptr, rem->_mp_d, op_ptr, op_size); - - root->_mp_size = root_size; - - /* Write remainder size last, to enable us to define this function to - give only the square root remainder, if the user calls if with - ROOT == REM. */ - rem->_mp_size = rem_size; - - if (free_me != NULL) - (*_mp_free_func) (free_me, free_me_size * BYTES_PER_MP_LIMB); - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/sub.c b/rts/gmp/mpz/sub.c deleted file mode 100644 index f3ae7c2..0000000 --- a/rts/gmp/mpz/sub.c +++ /dev/null @@ -1,123 +0,0 @@ -/* mpz_sub -- Subtract two integers. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - -#ifndef BERKELEY_MP -void -#if __STDC__ -mpz_sub (mpz_ptr w, mpz_srcptr u, mpz_srcptr v) -#else -mpz_sub (w, u, v) - mpz_ptr w; - mpz_srcptr u; - mpz_srcptr v; -#endif -#else /* BERKELEY_MP */ -void -#if __STDC__ -msub (mpz_srcptr u, mpz_srcptr v, mpz_ptr w) -#else -msub (u, v, w) - mpz_srcptr u; - mpz_srcptr v; - mpz_ptr w; -#endif -#endif /* BERKELEY_MP */ -{ - mp_srcptr up, vp; - mp_ptr wp; - mp_size_t usize, vsize, wsize; - mp_size_t abs_usize; - mp_size_t abs_vsize; - - usize = u->_mp_size; - vsize = -v->_mp_size; /* The "-" makes the difference from mpz_add */ - abs_usize = ABS (usize); - abs_vsize = ABS (vsize); - - if (abs_usize < abs_vsize) - { - /* Swap U and V. */ - MPZ_SRCPTR_SWAP (u, v); - MP_SIZE_T_SWAP (usize, vsize); - MP_SIZE_T_SWAP (abs_usize, abs_vsize); - } - - /* True: ABS_USIZE >= ABS_VSIZE. */ - - /* If not space for w (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (u or v may be the same as w). */ - up = u->_mp_d; - vp = v->_mp_d; - wp = w->_mp_d; - - if ((usize ^ vsize) < 0) - { - /* U and V have different sign. Need to compare them to determine - which operand to subtract from which. */ - - /* This test is right since ABS_USIZE >= ABS_VSIZE. */ - if (abs_usize != abs_vsize) - { - mpn_sub (wp, up, abs_usize, vp, abs_vsize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - else if (mpn_cmp (up, vp, abs_usize) < 0) - { - mpn_sub_n (wp, vp, up, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize >= 0) - wsize = -wsize; - } - else - { - mpn_sub_n (wp, up, vp, abs_usize); - wsize = abs_usize; - MPN_NORMALIZE (wp, wsize); - if (usize < 0) - wsize = -wsize; - } - } - else - { - /* U and V have same sign. Add them. */ - mp_limb_t cy_limb = mpn_add (wp, up, abs_usize, vp, abs_vsize); - wp[abs_usize] = cy_limb; - wsize = abs_usize + cy_limb; - if (usize < 0) - wsize = -wsize; - } - - w->_mp_size = wsize; -} diff --git a/rts/gmp/mpz/sub_ui.c b/rts/gmp/mpz/sub_ui.c deleted file mode 100644 index 327add8..0000000 --- a/rts/gmp/mpz/sub_ui.c +++ /dev/null @@ -1,84 +0,0 @@ -/* mpz_sub_ui -- Subtract an unsigned one-word integer from an MP_INT. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_sub_ui (mpz_ptr w, mpz_srcptr u, unsigned long int v) -#else -mpz_sub_ui (w, u, v) - mpz_ptr w; - mpz_srcptr u; - unsigned long int v; -#endif -{ - mp_srcptr up; - mp_ptr wp; - mp_size_t usize, wsize; - mp_size_t abs_usize; - - usize = u->_mp_size; - abs_usize = ABS (usize); - - /* If not space for W (and possible carry), increase space. */ - wsize = abs_usize + 1; - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - /* These must be after realloc (U may be the same as W). */ - up = u->_mp_d; - wp = w->_mp_d; - - if (abs_usize == 0) - { - wp[0] = v; - w->_mp_size = -(v != 0); - return; - } - - if (usize < 0) - { - mp_limb_t cy; - cy = mpn_add_1 (wp, up, abs_usize, (mp_limb_t) v); - wp[abs_usize] = cy; - wsize = -(abs_usize + cy); - } - else - { - /* The signs are different. Need exact comparison to determine - which operand to subtract from which. */ - if (abs_usize == 1 && up[0] < v) - { - wp[0] = v - up[0]; - wsize = -1; - } - else - { - mpn_sub_1 (wp, up, abs_usize, (mp_limb_t) v); - /* Size can decrease with at most one limb. */ - wsize = abs_usize - (wp[abs_usize - 1] == 0); - } - } - - w->_mp_size = wsize; -} diff --git a/rts/gmp/mpz/swap.c b/rts/gmp/mpz/swap.c deleted file mode 100644 index 0070d6f..0000000 --- a/rts/gmp/mpz/swap.c +++ /dev/null @@ -1,52 +0,0 @@ -/* mpz_swap (dest_integer, src_integer) -- Swap U and V. - -Copyright (C) 1997, 1998 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_swap (mpz_ptr u, mpz_ptr v) -#else -mpz_swap (u, v) - mpz_ptr u; - mpz_ptr v; -#endif -{ - mp_ptr up, vp; - mp_size_t usize, vsize; - mp_size_t ualloc, valloc; - - ualloc = u->_mp_alloc; - valloc = v->_mp_alloc; - v->_mp_alloc = ualloc; - u->_mp_alloc = valloc; - - usize = u->_mp_size; - vsize = v->_mp_size; - v->_mp_size = usize; - u->_mp_size = vsize; - - up = u->_mp_d; - vp = v->_mp_d; - v->_mp_d = up; - u->_mp_d = vp; -} diff --git a/rts/gmp/mpz/tdiv_q.c b/rts/gmp/mpz/tdiv_q.c deleted file mode 100644 index 21db4ab..0000000 --- a/rts/gmp/mpz/tdiv_q.c +++ /dev/null @@ -1,91 +0,0 @@ -/* mpz_tdiv_q -- divide two integers and produce a quotient. - -Copyright (C) 1991, 1993, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_tdiv_q (mpz_ptr quot, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_q (quot, num, den) - mpz_ptr quot; - mpz_srcptr num; - mpz_srcptr den; -#endif -{ - mp_size_t ql; - mp_size_t ns, ds, nl, dl; - mp_ptr np, dp, qp, rp; - TMP_DECL (marker); - - ns = SIZ (num); - ds = SIZ (den); - nl = ABS (ns); - dl = ABS (ds); - ql = nl - dl + 1; - - if (dl == 0) - DIVIDE_BY_ZERO; - - if (ql <= 0) - { - SIZ (quot) = 0; - return; - } - - MPZ_REALLOC (quot, ql); - - TMP_MARK (marker); - qp = PTR (quot); - rp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB); - np = PTR (num); - dp = PTR (den); - - /* FIXME: We should think about how to handle the temporary allocation. - Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to - allocate temp space. */ - - /* Copy denominator to temporary space if it overlaps with the quotient. */ - if (dp == qp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, dp, dl); - dp = tp; - } - /* Copy numerator to temporary space if it overlaps with the quotient. */ - if (np == qp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, np, nl); - np = tp; - } - - mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl); - - ql -= qp[ql - 1] == 0; - - SIZ (quot) = (ns ^ ds) >= 0 ? ql : -ql; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/tdiv_q_2exp.c b/rts/gmp/mpz/tdiv_q_2exp.c deleted file mode 100644 index 03d1e01..0000000 --- a/rts/gmp/mpz/tdiv_q_2exp.c +++ /dev/null @@ -1,68 +0,0 @@ -/* mpz_tdiv_q_2exp -- Divide an integer by 2**CNT. Round the quotient - towards -infinity. - -Copyright (C) 1991, 1993, 1994, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_q_2exp (mpz_ptr w, mpz_srcptr u, unsigned long int cnt) -#else -mpz_tdiv_q_2exp (w, u, cnt) - mpz_ptr w; - mpz_srcptr u; - unsigned long int cnt; -#endif -{ - mp_size_t usize, wsize; - mp_size_t limb_cnt; - - usize = u->_mp_size; - limb_cnt = cnt / BITS_PER_MP_LIMB; - wsize = ABS (usize) - limb_cnt; - if (wsize <= 0) - w->_mp_size = 0; - else - { - mp_ptr wp; - mp_srcptr up; - - if (w->_mp_alloc < wsize) - _mpz_realloc (w, wsize); - - wp = w->_mp_d; - up = u->_mp_d; - - cnt %= BITS_PER_MP_LIMB; - if (cnt != 0) - { - mpn_rshift (wp, up + limb_cnt, wsize, cnt); - wsize -= wp[wsize - 1] == 0; - } - else - { - MPN_COPY_INCR (wp, up + limb_cnt, wsize); - } - - w->_mp_size = usize >= 0 ? wsize : -wsize; - } -} diff --git a/rts/gmp/mpz/tdiv_q_ui.c b/rts/gmp/mpz/tdiv_q_ui.c deleted file mode 100644 index a2e3462..0000000 --- a/rts/gmp/mpz/tdiv_q_ui.c +++ /dev/null @@ -1,64 +0,0 @@ -/* mpz_tdiv_q_ui(quot, dividend, divisor_limb) - -- Divide DIVIDEND by DIVISOR_LIMB and store the result in QUOT. - -Copyright (C) 1991, 1993, 1994, 1996, 1998 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_tdiv_q_ui (mpz_ptr quot, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_q_ui (quot, dividend, divisor) - mpz_ptr quot; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb - = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, (mp_limb_t) divisor); - - /* The quotient is SIZE limbs, but the most significant might be zero. */ - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/tdiv_qr.c b/rts/gmp/mpz/tdiv_qr.c deleted file mode 100644 index d66f57d..0000000 --- a/rts/gmp/mpz/tdiv_qr.c +++ /dev/null @@ -1,130 +0,0 @@ -/* mpz_tdiv_qr(quot,rem,dividend,divisor) -- Set QUOT to DIVIDEND/DIVISOR, - and REM to DIVIDEND mod DIVISOR. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" -#ifdef BERKELEY_MP -#include "mp.h" -#endif - - -#ifndef BERKELEY_MP - -void -#if __STDC__ -mpz_tdiv_qr (mpz_ptr quot, mpz_ptr rem, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_qr (quot, rem, num, den) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr num; - mpz_srcptr den; -#endif - -#else /* BERKELEY_MP */ - -void -#if __STDC__ -mdiv (mpz_srcptr num, mpz_srcptr den, mpz_ptr quot, mpz_ptr rem) -#else -mdiv (num, den, quot, rem) - mpz_srcptr num; - mpz_srcptr den; - mpz_ptr quot; - mpz_ptr rem; -#endif - -#endif /* BERKELEY_MP */ -{ - mp_size_t ql; - mp_size_t ns, ds, nl, dl; - mp_ptr np, dp, qp, rp; - TMP_DECL (marker); - - ns = SIZ (num); - ds = SIZ (den); - nl = ABS (ns); - dl = ABS (ds); - ql = nl - dl + 1; - - if (dl == 0) - DIVIDE_BY_ZERO; - - MPZ_REALLOC (rem, dl); - - if (ql <= 0) - { - if (num != rem) - { - mp_ptr np, rp; - np = PTR (num); - rp = PTR (rem); - MPN_COPY (rp, np, nl); - SIZ (rem) = SIZ (num); - } - /* This needs to follow the assignment to rem, in case the - numerator and quotient are the same. */ - SIZ (quot) = 0; - return; - } - - MPZ_REALLOC (quot, ql); - - TMP_MARK (marker); - qp = PTR (quot); - rp = PTR (rem); - np = PTR (num); - dp = PTR (den); - - /* FIXME: We should think about how to handle the temporary allocation. - Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to - allocate temp space. */ - - /* Copy denominator to temporary space if it overlaps with the quotient - or remainder. */ - if (dp == rp || dp == qp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, dp, dl); - dp = tp; - } - /* Copy numerator to temporary space if it overlaps with the quotient or - remainder. */ - if (np == rp || np == qp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, np, nl); - np = tp; - } - - mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl); - - ql -= qp[ql - 1] == 0; - MPN_NORMALIZE (rp, dl); - - SIZ (quot) = (ns ^ ds) >= 0 ? ql : -ql; - SIZ (rem) = ns >= 0 ? dl : -dl; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/tdiv_qr_ui.c b/rts/gmp/mpz/tdiv_qr_ui.c deleted file mode 100644 index 10368cd..0000000 --- a/rts/gmp/mpz/tdiv_qr_ui.c +++ /dev/null @@ -1,76 +0,0 @@ -/* mpz_tdiv_qr_ui(quot,rem,dividend,short_divisor) -- - Set QUOT to DIVIDEND / SHORT_DIVISOR - and REM to DIVIDEND mod SHORT_DIVISOR. - -Copyright (C) 1991, 1993, 1994, 1996, 1998 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_tdiv_qr_ui (mpz_ptr quot, mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_qr_ui (quot, rem, dividend, divisor) - mpz_ptr quot; - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_ptr quot_ptr; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - if (quot->_mp_alloc < size) - _mpz_realloc (quot, size); - - quot_ptr = quot->_mp_d; - - remainder_limb = mpn_divmod_1 (quot_ptr, dividend->_mp_d, size, - (mp_limb_t) divisor); - - if (remainder_limb == 0) - rem->_mp_size = 0; - else - { - /* Store the single-limb remainder. We don't check if there's space - for just one limb, since no function ever makes zero space. */ - rem->_mp_size = dividend_size >= 0 ? 1 : -1; - rem->_mp_d[0] = remainder_limb; - } - - /* The quotient is SIZE limbs, but the most significant might be zero. */ - size -= size != 0 && quot_ptr[size - 1] == 0; - quot->_mp_size = dividend_size >= 0 ? size : -size; - - return remainder_limb; -} diff --git a/rts/gmp/mpz/tdiv_r.c b/rts/gmp/mpz/tdiv_r.c deleted file mode 100644 index 9eb87df..0000000 --- a/rts/gmp/mpz/tdiv_r.c +++ /dev/null @@ -1,98 +0,0 @@ -/* mpz_tdiv_r(rem, dividend, divisor) -- Set REM to DIVIDEND mod DIVISOR. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_tdiv_r (mpz_ptr rem, mpz_srcptr num, mpz_srcptr den) -#else -mpz_tdiv_r (rem, num, den) - mpz_ptr rem; - mpz_srcptr num; - mpz_srcptr den; -#endif -{ - mp_size_t ql; - mp_size_t ns, ds, nl, dl; - mp_ptr np, dp, qp, rp; - TMP_DECL (marker); - - ns = SIZ (num); - ds = SIZ (den); - nl = ABS (ns); - dl = ABS (ds); - ql = nl - dl + 1; - - if (dl == 0) - DIVIDE_BY_ZERO; - - MPZ_REALLOC (rem, dl); - - if (ql <= 0) - { - if (num != rem) - { - mp_ptr np, rp; - np = PTR (num); - rp = PTR (rem); - MPN_COPY (rp, np, nl); - SIZ (rem) = SIZ (num); - } - return; - } - - TMP_MARK (marker); - qp = (mp_ptr) TMP_ALLOC (ql * BYTES_PER_MP_LIMB); - rp = PTR (rem); - np = PTR (num); - dp = PTR (den); - - /* FIXME: We should think about how to handle the temporary allocation. - Perhaps mpn_tdiv_qr should handle it, since it anyway often needs to - allocate temp space. */ - - /* Copy denominator to temporary space if it overlaps with the remainder. */ - if (dp == rp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (dl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, dp, dl); - dp = tp; - } - /* Copy numerator to temporary space if it overlaps with the remainder. */ - if (np == rp) - { - mp_ptr tp; - tp = (mp_ptr) TMP_ALLOC (nl * BYTES_PER_MP_LIMB); - MPN_COPY (tp, np, nl); - np = tp; - } - - mpn_tdiv_qr (qp, rp, 0L, np, nl, dp, dl); - - MPN_NORMALIZE (rp, dl); - - SIZ (rem) = ns >= 0 ? dl : -dl; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/tdiv_r_2exp.c b/rts/gmp/mpz/tdiv_r_2exp.c deleted file mode 100644 index 91de170..0000000 --- a/rts/gmp/mpz/tdiv_r_2exp.c +++ /dev/null @@ -1,79 +0,0 @@ -/* mpz_tdiv_r_2exp -- Divide a integer by 2**CNT and produce a remainder. - -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_tdiv_r_2exp (mpz_ptr res, mpz_srcptr in, unsigned long int cnt) -#else -mpz_tdiv_r_2exp (res, in, cnt) - mpz_ptr res; - mpz_srcptr in; - unsigned long int cnt; -#endif -{ - mp_size_t in_size = ABS (in->_mp_size); - mp_size_t res_size; - mp_size_t limb_cnt = cnt / BITS_PER_MP_LIMB; - mp_srcptr in_ptr = in->_mp_d; - - if (in_size > limb_cnt) - { - /* The input operand is (probably) greater than 2**CNT. */ - mp_limb_t x; - - x = in_ptr[limb_cnt] & (((mp_limb_t) 1 << cnt % BITS_PER_MP_LIMB) - 1); - if (x != 0) - { - res_size = limb_cnt + 1; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - res->_mp_d[limb_cnt] = x; - } - else - { - res_size = limb_cnt; - MPN_NORMALIZE (in_ptr, res_size); - - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - } - else - { - /* The input operand is smaller than 2**CNT. We perform a no-op, - apart from that we might need to copy IN to RES. */ - res_size = in_size; - if (res->_mp_alloc < res_size) - _mpz_realloc (res, res_size); - - limb_cnt = res_size; - } - - if (res != in) - MPN_COPY (res->_mp_d, in->_mp_d, limb_cnt); - res->_mp_size = in->_mp_size >= 0 ? res_size : -res_size; -} diff --git a/rts/gmp/mpz/tdiv_r_ui.c b/rts/gmp/mpz/tdiv_r_ui.c deleted file mode 100644 index 2ea411f..0000000 --- a/rts/gmp/mpz/tdiv_r_ui.c +++ /dev/null @@ -1,63 +0,0 @@ -/* mpz_tdiv_r_ui(rem, dividend, divisor_limb) - -- Set REM to DIVDEND mod DIVISOR_LIMB. - -Copyright (C) 1991, 1993, 1994, 1996, 1998 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_tdiv_r_ui (mpz_ptr rem, mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_r_ui (rem, dividend, divisor) - mpz_ptr rem; - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - if (remainder_limb == 0) - rem->_mp_size = 0; - else - { - /* Store the single-limb remainder. We don't check if there's space - for just one limb, since no function ever makes zero space. */ - rem->_mp_size = dividend_size >= 0 ? 1 : -1; - rem->_mp_d[0] = remainder_limb; - } - - return remainder_limb; -} diff --git a/rts/gmp/mpz/tdiv_ui.c b/rts/gmp/mpz/tdiv_ui.c deleted file mode 100644 index 7a40a6a..0000000 --- a/rts/gmp/mpz/tdiv_ui.c +++ /dev/null @@ -1,53 +0,0 @@ -/* mpz_tdiv_ui(dividend, divisor_limb) - -- Return DIVDEND mod DIVISOR_LIMB. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998 Free Software Foundation, -Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -unsigned long int -#if __STDC__ -mpz_tdiv_ui (mpz_srcptr dividend, unsigned long int divisor) -#else -mpz_tdiv_ui (dividend, divisor) - mpz_srcptr dividend; - unsigned long int divisor; -#endif -{ - mp_size_t dividend_size; - mp_size_t size; - mp_limb_t remainder_limb; - - if (divisor == 0) - DIVIDE_BY_ZERO; - - dividend_size = dividend->_mp_size; - size = ABS (dividend_size); - - /* No need for temporary allocation and copying if QUOT == DIVIDEND as - the divisor is just one limb, and thus no intermediate remainders - need to be stored. */ - - remainder_limb = mpn_mod_1 (dividend->_mp_d, size, (mp_limb_t) divisor); - - return remainder_limb; -} diff --git a/rts/gmp/mpz/tstbit.c b/rts/gmp/mpz/tstbit.c deleted file mode 100644 index b0a8b0b..0000000 --- a/rts/gmp/mpz/tstbit.c +++ /dev/null @@ -1,70 +0,0 @@ -/* mpz_tstbit -- test a specified bit. Simulate 2's complement representation. - -Copyright (C) 1997 Free Software Foundation, Inc. - -This file is part of the GNU MP Library. - -The GNU MP Library is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -int -#if __STDC__ -mpz_tstbit (mpz_srcptr d, unsigned long int bit_index) -#else -mpz_tstbit (d, bit_index) - mpz_srcptr d; - unsigned long int bit_index; -#endif -{ - mp_size_t dsize = d->_mp_size; - mp_ptr dp = d->_mp_d; - mp_size_t limb_index; - - limb_index = bit_index / BITS_PER_MP_LIMB; - if (dsize >= 0) - { - if (limb_index < dsize) - return (dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1; - else - /* Testing a bit outside of a positive number. */ - return 0; - } - else - { - mp_size_t zero_bound; - - dsize = -dsize; - - /* Locate the least significant non-zero limb. */ - for (zero_bound = 0; dp[zero_bound] == 0; zero_bound++) - ; - - if (limb_index > zero_bound) - { - if (limb_index < dsize) - return (~dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1; - else - /* Testing a bit outside of a negative number. */ - return 1; - } - else if (limb_index == zero_bound) - return (-dp[limb_index] >> (bit_index % BITS_PER_MP_LIMB)) & 1; - else - return 0; - } -} diff --git a/rts/gmp/mpz/ui_pow_ui.c b/rts/gmp/mpz/ui_pow_ui.c deleted file mode 100644 index edd2dee..0000000 --- a/rts/gmp/mpz/ui_pow_ui.c +++ /dev/null @@ -1,139 +0,0 @@ -/* mpz_ui_pow_ui(res, base, exp) -- Set RES to BASE**EXP. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - - -static void mpz_pow2 _PROTO ((mpz_ptr r, mp_limb_t blimb, unsigned long int e, mp_limb_t rl)); - -void -#if __STDC__ -mpz_ui_pow_ui (mpz_ptr r, unsigned long int b, unsigned long int e) -#else -mpz_ui_pow_ui (r, b, e) - mpz_ptr r; - unsigned long int b; - unsigned long int e; -#endif -{ - mp_limb_t blimb = b; - mp_limb_t rl; - - if (e == 0) - { - /* For x^0 we return 1, even if x is 0. */ - r->_mp_d[0] = 1; - r->_mp_size = 1; - return; - } - - /* Compute b^e as (b^n)^(e div n) * b^(e mod n), where n is chosen such that - the latter factor is the largest number small enough to fit in a limb. */ - - rl = 1; - while (e != 0 && blimb < ((mp_limb_t) 1 << BITS_PER_MP_LIMB/2)) - { - if ((e & 1) != 0) - rl = rl * blimb; - blimb = blimb * blimb; - e = e >> 1; - } - - /* rl is now b^(e mod n). (I.e., the latter factor above.) */ - - if (e == 0) - { - r->_mp_d[0] = rl; - r->_mp_size = rl != 0; - return; - } - - mpz_pow2 (r, blimb, e, rl); -} - -/* Multi-precision part of expontialization code. */ -static void -#if __STDC__ -mpz_pow2 (mpz_ptr r, mp_limb_t blimb, unsigned long int e, mp_limb_t rl) -#else -mpz_pow2 (r, blimb, e, rl) - mpz_ptr r; - mp_limb_t blimb; - unsigned long int e; - mp_limb_t rl; -#endif -{ - mp_ptr rp, tp; - mp_size_t ralloc, rsize; - int cnt, i; - TMP_DECL (marker); - - TMP_MARK (marker); - - /* Over-estimate temporary space requirements somewhat. */ - count_leading_zeros (cnt, blimb); - ralloc = e - cnt * e / BITS_PER_MP_LIMB + 1; - - /* The two areas are used to alternatingly hold the input and receive the - product for mpn_mul. (Needed since mpn_mul_n requires that the product - is distinct from either input operand.) */ - rp = (mp_ptr) TMP_ALLOC (ralloc * BYTES_PER_MP_LIMB); - tp = (mp_ptr) TMP_ALLOC (ralloc * BYTES_PER_MP_LIMB); - - rp[0] = blimb; - rsize = 1; - - count_leading_zeros (cnt, e); - for (i = BITS_PER_MP_LIMB - cnt - 2; i >= 0; i--) - { - mpn_mul_n (tp, rp, rp, rsize); - rsize = 2 * rsize; - rsize -= tp[rsize - 1] == 0; - MP_PTR_SWAP (rp, tp); - - if ((e & ((mp_limb_t) 1 << i)) != 0) - { - mp_limb_t cy; - cy = mpn_mul_1 (rp, rp, rsize, blimb); - rp[rsize] = cy; - rsize += cy != 0; - } - } - - /* We will need rsize or rsize+1 limbs for the result. */ - if (r->_mp_alloc <= rsize) - _mpz_realloc (r, rsize + 1); - - /* Multiply the two factors (in rp,rsize and rl) and put the final result - in place. */ - { - mp_limb_t cy; - cy = mpn_mul_1 (r->_mp_d, rp, rsize, rl); - (r->_mp_d)[rsize] = cy; - rsize += cy != 0; - } - - r->_mp_size = rsize; - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/urandomb.c b/rts/gmp/mpz/urandomb.c deleted file mode 100644 index caca086..0000000 --- a/rts/gmp/mpz/urandomb.c +++ /dev/null @@ -1,49 +0,0 @@ -/* mpz_urandomb (rop, state, n) -- Generate a uniform pseudorandom - integer in the range 0 to 2^N - 1, inclusive, using STATE as the - random state previously initialized by a call to gmp_randinit(). - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_urandomb (mpz_t rop, gmp_randstate_t rstate, unsigned long int nbits) -#else -mpz_urandomb (rop, rstate, nbits) - mpz_t rop; - gmp_randstate_t rstate; - unsigned long int nbits; -#endif -{ - mp_ptr rp; - mp_size_t size; - - size = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - if (ALLOC (rop) < size) - _mpz_realloc (rop, size); - - rp = PTR (rop); - - _gmp_rand (rp, rstate, nbits); - MPN_NORMALIZE (rp, size); - SIZ (rop) = size; -} diff --git a/rts/gmp/mpz/urandomm.c b/rts/gmp/mpz/urandomm.c deleted file mode 100644 index 69e1bae..0000000 --- a/rts/gmp/mpz/urandomm.c +++ /dev/null @@ -1,78 +0,0 @@ -/* mpz_urandomm (rop, state, n) -- Generate a uniform pseudorandom - integer in the range 0 to N-1, using STATE as the random state - previously initialized by a call to gmp_randinit(). - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -void -#if __STDC__ -mpz_urandomm (mpz_t rop, gmp_randstate_t rstate, mpz_t n) -#else -mpz_urandomm (rop, rstate, n) - mpz_t rop; - gmp_randstate_t rstate; - mpz_t n; -#endif -{ - mpz_t t, p, m; - mp_ptr tp; - mp_size_t nbits, size; - int count; - TMP_DECL (marker); - - TMP_MARK (marker); - - /* FIXME: Should check for n == 0 and report error */ - - size = SIZ (n); - count_leading_zeros (count, PTR (n)[size - 1]); - nbits = size * BITS_PER_MP_LIMB - count; - - /* Allocate enough for any mpz function called since a realloc of - these will fail. */ - MPZ_TMP_INIT (t, size); - MPZ_TMP_INIT (m, size + 1); - MPZ_TMP_INIT (p, size + 1); - - /* Let m = highest possible random number plus 1. */ - mpz_set_ui (m, 0); - mpz_setbit (m, nbits); - - /* Let p = floor(m / n) * n. */ - mpz_fdiv_q (p, m, n); - mpz_mul (p, p, n); - - tp = PTR (t); - do - { - _gmp_rand (tp, rstate, nbits); - MPN_NORMALIZE (tp, size); /* FIXME: Really necessary? */ - SIZ (t) = size; - } - while (mpz_cmp (t, p) >= 0); - - mpz_mod (rop, t, n); - - TMP_FREE (marker); -} diff --git a/rts/gmp/mpz/xor.c b/rts/gmp/mpz/xor.c deleted file mode 100644 index 69898d1..0000000 --- a/rts/gmp/mpz/xor.c +++ /dev/null @@ -1,217 +0,0 @@ -/* mpz_xor -- Logical xor. - -Copyright (C) 1991, 1993, 1994, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -mpz_xor (mpz_ptr res, mpz_srcptr op1, mpz_srcptr op2) -#else -mpz_xor (res, op1, op2) - mpz_ptr res; - mpz_srcptr op1; - mpz_srcptr op2; -#endif -{ - mp_srcptr op1_ptr, op2_ptr; - mp_size_t op1_size, op2_size; - mp_ptr res_ptr; - mp_size_t res_size, res_alloc; - mp_size_t i; - TMP_DECL (marker); - - TMP_MARK (marker); - op1_size = op1->_mp_size; - op2_size = op2->_mp_size; - - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - - if (op1_size >= 0) - { - if (op2_size >= 0) - { - if (op1_size >= op2_size) - { - if (res->_mp_alloc < op1_size) - { - _mpz_realloc (res, op1_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op1_ptr) - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op1_size; - } - else - { - if (res->_mp_alloc < op2_size) - { - _mpz_realloc (res, op2_size); - op1_ptr = op1->_mp_d; - op2_ptr = op2->_mp_d; - res_ptr = res->_mp_d; - } - - if (res_ptr != op2_ptr) - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op2_size; - } - - MPN_NORMALIZE (res_ptr, res_size); - res->_mp_size = res_size; - return; - } - else /* op2_size < 0 */ - { - /* Fall through to the code at the end of the function. */ - } - } - else - { - if (op2_size < 0) - { - mp_ptr opx; - mp_limb_t cy; - - /* Both operands are negative, the result will be positive. - (-OP1) ^ (-OP2) = - = ~(OP1 - 1) ^ ~(OP2 - 1) = - = (OP1 - 1) ^ (OP2 - 1) */ - - op1_size = -op1_size; - op2_size = -op2_size; - - /* Possible optimization: Decrease mpn_sub precision, - as we won't use the entire res of both. */ - opx = (mp_ptr) TMP_ALLOC (op1_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op1_ptr, op1_size, (mp_limb_t) 1); - op1_ptr = opx; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - res_alloc = MAX (op1_size, op2_size); - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - res_ptr = res->_mp_d; - /* Don't re-read OP1_PTR and OP2_PTR. They point to - temporary space--never to the space RES->_mp_d used - to point to before reallocation. */ - } - - if (op1_size > op2_size) - { - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, - op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op1_size; - } - else - { - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, - op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op2_size; - } - - MPN_NORMALIZE (res_ptr, res_size); - res->_mp_size = res_size; - TMP_FREE (marker); - return; - } - else - { - /* We should compute -OP1 ^ OP2. Swap OP1 and OP2 and fall - through to the code that handles OP1 ^ -OP2. */ - MPZ_SRCPTR_SWAP (op1, op2); - MPN_SRCPTR_SWAP (op1_ptr,op1_size, op2_ptr,op2_size); - } - } - - { - mp_ptr opx; - mp_limb_t cy; - mp_size_t count; - - /* Operand 2 negative, so will be the result. - -(OP1 ^ (-OP2)) = -(OP1 ^ ~(OP2 - 1)) = - = ~(OP1 ^ ~(OP2 - 1)) + 1 = - = (OP1 ^ (OP2 - 1)) + 1 */ - - op2_size = -op2_size; - - opx = (mp_ptr) TMP_ALLOC (op2_size * BYTES_PER_MP_LIMB); - mpn_sub_1 (opx, op2_ptr, op2_size, (mp_limb_t) 1); - op2_ptr = opx; - - res_alloc = MAX (op1_size, op2_size) + 1; - if (res->_mp_alloc < res_alloc) - { - _mpz_realloc (res, res_alloc); - op1_ptr = op1->_mp_d; - res_ptr = res->_mp_d; - /* Don't re-read OP2_PTR. It points to temporary space--never - to the space RES->_mp_d used to point to before reallocation. */ - } - - if (op1_size > op2_size) - { - MPN_COPY (res_ptr + op2_size, op1_ptr + op2_size, op1_size - op2_size); - for (i = op2_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op1_size; - } - else - { - MPN_COPY (res_ptr + op1_size, op2_ptr + op1_size, op2_size - op1_size); - for (i = op1_size - 1; i >= 0; i--) - res_ptr[i] = op1_ptr[i] ^ op2_ptr[i]; - res_size = op2_size; - } - - cy = mpn_add_1 (res_ptr, res_ptr, res_size, (mp_limb_t) 1); - if (cy) - { - res_ptr[res_size] = cy; - res_size++; - } - - MPN_NORMALIZE (res_ptr, res_size); - res->_mp_size = -res_size; - TMP_FREE (marker); - } -} diff --git a/rts/gmp/rand.c b/rts/gmp/rand.c deleted file mode 100644 index d1f9354..0000000 --- a/rts/gmp/rand.c +++ /dev/null @@ -1,171 +0,0 @@ -/* gmp_randinit (state, algorithm, ...) -- Initialize a random state. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include /* for NULL */ -#if __STDC__ -# include -#else -# include -#endif - -#include "gmp.h" -#include "gmp-impl.h" - -/* Array of CL-schemes, ordered in increasing order of the first - member (the 'm2exp' value). The end of the array is indicated with - an entry containing all zeros. */ - -/* All multipliers are in the range 0.01*m and 0.99*m, and are -congruent to 5 (mod 8). -They all pass the spectral test with Vt >= 2^(30/t) and merit >= 1. -(Up to and including 196 bits, merit is >= 3.) */ - -struct __gmp_rand_lc_scheme_struct -{ - unsigned long int m2exp; /* Modulus is 2 ^ m2exp. */ - char *astr; /* Multiplier in string form. */ - unsigned long int c; /* Adder. */ -}; - -struct __gmp_rand_lc_scheme_struct __gmp_rand_lc_scheme[] = -{ - {32, "43840821", 1}, - {33, "85943917", 1}, - {34, "171799469", 1}, - {35, "343825285", 1}, - {36, "687285701", 1}, - {37, "1374564613", 1}, - {38, "2749193437", 1}, - {39, "5497652029", 1}, - {40, "10995212661", 1}, - {56, "47988680294711517", 1}, - {64, "13469374875402548381", 1}, - {100, "203786806069096950756900463357", 1}, - {128, "96573135900076068624591706046897650309", 1}, - {156, "43051576988660538262511726153887323360449035333", 1}, - {196, "1611627857640767981443524165616850972435303571524033586421", 1}, - {200, "491824250216153841876046962368396460896019632211283945747141", 1}, - {256, "79336254595106925775099152154558630917988041692672147726148065355845551082677", 1}, - {0, NULL, 0} /* End of array. */ -}; - -void -#if __STDC__ -gmp_randinit (gmp_randstate_t rstate, - gmp_randalg_t alg, - ...) -#else -gmp_randinit (va_alist) - va_dcl -#endif -{ - va_list ap; -#if __STDC__ -#else - __gmp_randstate_struct *rstate; - gmp_randalg_t alg; -#endif - -#if __STDC__ - va_start (ap, alg); -#else - va_start (ap); - - rstate = va_arg (ap, __gmp_randstate_struct *); - alg = va_arg (ap, gmp_randalg_t); -#endif - - switch (alg) - { - case GMP_RAND_ALG_LC: /* Linear congruential. */ - { - unsigned long int size; - struct __gmp_rand_lc_scheme_struct *sp; - mpz_t a; - - size = va_arg (ap, unsigned long int); - - /* Pick a scheme. */ - for (sp = __gmp_rand_lc_scheme; sp->m2exp != 0; sp++) - if (sp->m2exp / 2 >= size) - break; - - if (sp->m2exp == 0) /* Nothing big enough found. */ - { - gmp_errno |= GMP_ERROR_INVALID_ARGUMENT; - return; - } - - /* Install scheme. */ - mpz_init_set_str (a, sp->astr, 0); - gmp_randinit_lc_2exp (rstate, a, sp->c, sp->m2exp); - mpz_clear (a); - break; - } - -#if 0 - case GMP_RAND_ALG_BBS: /* Blum, Blum, and Shub. */ - { - mpz_t p, q; - mpz_t ztmp; - - /* FIXME: Generate p and q. They must be ``large'' primes, - congruent to 3 mod 4. Should we ensure that they meet some - of the criterias for being ``hard primes''?*/ - - /* These are around 128 bits. */ - mpz_init_set_str (p, "148028650191182616877187862194899201391", 10); - mpz_init_set_str (q, "315270837425234199477225845240496832591", 10); - - /* Allocate algorithm specific data. */ - rstate->data.bbs = (__gmp_rand_data_bbs *) - (*_mp_allocate_func) (sizeof (__gmp_rand_data_bbs)); - - mpz_init (rstate->data.bbs->bi); /* The Blum integer. */ - mpz_mul (rstate->data.bbs->bi, p, q); - - /* Find a seed, x, with gcd (x, bi) == 1. */ - mpz_init (ztmp); - while (1) - { - mpz_gcd (ztmp, seed, rstate->data.bbs->bi); - if (!mpz_cmp_ui (ztmp, 1)) - break; - mpz_add_ui (seed, seed, 1); - } - - rstate->alg = alg; - rstate->size = size; /* FIXME: Remove. */ - mpz_set (rstate->seed, seed); - - mpz_clear (p); - mpz_clear (q); - mpz_clear (ztmp); - break; - } -#endif /* 0 */ - - default: /* Bad choice. */ - gmp_errno |= GMP_ERROR_UNSUPPORTED_ARGUMENT; - } - - va_end (ap); -} diff --git a/rts/gmp/randclr.c b/rts/gmp/randclr.c deleted file mode 100644 index 5cb0291..0000000 --- a/rts/gmp/randclr.c +++ /dev/null @@ -1,54 +0,0 @@ -/* gmp_randclear (state) -- Clear and deallocate random state STATE. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -gmp_randclear (gmp_randstate_t rstate) -#else -gmp_randclear (rstate) - gmp_randstate_t rstate; -#endif -{ - mpz_clear (rstate->seed); - - switch (rstate->alg) - { - case GMP_RAND_ALG_LC: - mpz_clear (rstate->algdata.lc->a); - if (rstate->algdata.lc->m2exp == 0) - mpz_clear (rstate->algdata.lc->m); - (*_mp_free_func) (rstate->algdata.lc, sizeof (*rstate->algdata.lc)); - break; - -#if 0 - case GMP_RAND_ALG_BBS: - mpz_clear (rstate->algdata.bbs->bi); - (*_mp_free_func) (rstate->algdata.bbs, sizeof (*rstate->algdata.bbs)); - break; -#endif /* 0 */ - - default: - gmp_errno |= GMP_ERROR_UNSUPPORTED_ARGUMENT; - } -} diff --git a/rts/gmp/randlc.c b/rts/gmp/randlc.c deleted file mode 100644 index 7079db8..0000000 --- a/rts/gmp/randlc.c +++ /dev/null @@ -1,56 +0,0 @@ -/* gmp_randinit_lc (state, a, c, m) -- Initialize a random state for a - linear congruential generator with multiplier A, adder C, and - modulus M. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -gmp_randinit_lc (gmp_randstate_t rstate, - mpz_t a, - unsigned long int c, - mpz_t m) -#else -gmp_randinit_lc (rstate, a, c, m) - gmp_randstate_t rstate; - mpz_t a; - unsigned long int c; - mpz_t m; -#endif -{ - /* FIXME: Not finished. We don't handle this in _gmp_rand() yet. */ - abort (); - - mpz_init_set_ui (rstate->seed, 1); - _mpz_realloc (rstate->seed, ABSIZ (m)); - - /* Allocate algorithm specific data. */ - rstate->algdata.lc = (__gmp_randata_lc *) - (*_mp_allocate_func) (sizeof (__gmp_randata_lc)); - - mpz_init_set (rstate->algdata.lc->a, a); - rstate->algdata.lc->c = c; - mpz_init_set (rstate->algdata.lc->m, m); - - rstate->alg = GMP_RAND_ALG_LC; -} diff --git a/rts/gmp/randlc2x.c b/rts/gmp/randlc2x.c deleted file mode 100644 index dbd5f04..0000000 --- a/rts/gmp/randlc2x.c +++ /dev/null @@ -1,59 +0,0 @@ -/* gmp_randinit_lc_2exp (state, a, c, m2exp) -- Initialize random - state STATE for a linear congruential generator with multiplier A, - adder C, and modulus 2 ^ M2EXP. - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -gmp_randinit_lc_2exp (gmp_randstate_t rstate, - mpz_t a, - unsigned long int c, - unsigned long int m2exp) -#else -gmp_randinit_lc_2exp (rstate, a, c, m2exp) - gmp_randstate_t rstate; - mpz_t a; - unsigned long int c; - unsigned long int m2exp; -#endif -{ - mpz_init_set_ui (rstate->seed, 1); - _mpz_realloc (rstate->seed, m2exp / BITS_PER_MP_LIMB - + (m2exp % BITS_PER_MP_LIMB != 0)); - - /* Allocate algorithm specific data. */ - rstate->algdata.lc = (__gmp_randata_lc *) - (*_mp_allocate_func) (sizeof (__gmp_randata_lc)); - - mpz_init_set (rstate->algdata.lc->a, a); - rstate->algdata.lc->c = c; - - /* Cover weird case where m2exp is 0, which means that m is used - instead of m2exp. */ - if (m2exp == 0) - mpz_init_set_ui (rstate->algdata.lc->m, 0); - rstate->algdata.lc->m2exp = m2exp; - - rstate->alg = GMP_RAND_ALG_LC; -} diff --git a/rts/gmp/randraw.c b/rts/gmp/randraw.c deleted file mode 100644 index c0c3889..0000000 --- a/rts/gmp/randraw.c +++ /dev/null @@ -1,360 +0,0 @@ -/* _gmp_rand (rp, state, nbits) -- Generate a random bitstream of - length NBITS in RP. RP must have enough space allocated to hold - NBITS. - -Copyright (C) 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" -#include "longlong.h" - -/* For linear congruential (LC), we use one of algorithms (1) or (2). - (gmp-3.0 uses algorithm (1) with 'm' as a power of 2.) - -LC algorithm (1). - - X = (aX + c) mod m - -[D. Knuth, "The Art of Computer Programming: Volume 2, Seminumerical Algorithms", -Third Edition, Addison Wesley, 1998, pp. 184-185.] - - X is the seed and the result - a is chosen so that - a mod 8 = 5 [3.2.1.2] and [3.2.1.3] - .01m < a < .99m - its binary or decimal digits is not a simple, regular pattern - it has no large quotients when Euclid's algorithm is used to find - gcd(a, m) [3.3.3] - it passes the spectral test [3.3.4] - it passes several tests of [3.3.2] - c has no factor in common with m (c=1 or c=a can be good) - m is large (2^30) - is a power of 2 [3.2.1.1] - -The least significant digits of the generated number are not very -random. It should be regarded as a random fraction X/m. To get a -random integer between 0 and n-1, multiply X/m by n and truncate. -(Don't use X/n [ex 3.4.1-3]) - -The ``accuracy'' in t dimensions is one part in ``the t'th root of m'' [3.3.4]. - -Don't generate more than about m/1000 numbers without changing a, c, or m. - -The sequence length depends on chosen a,c,m. - - -LC algorithm (2). - - X = a * (X mod q) - r * (long) (X/q) - if X<0 then X+=m - -[Knuth, pp. 185-186.] - - X is the seed and the result - as a seed is nonzero and less than m - a is a primitive root of m (which means that a^2 <= m) - q is (long) m / a - r is m mod a - m is a prime number near the largest easily computed integer - -which gives - - X = a * (X % ((long) m / a)) - - (M % a) * ((long) (X / ((long) m / a))) - -Since m is prime, the least-significant bits of X are just as random as -the most-significant bits. */ - -/* Blum, Blum, and Shub. - - [Bruce Schneier, "Applied Cryptography", Second Edition, John Wiley - & Sons, Inc., 1996, pp. 417-418.] - - "Find two large prime numbers, p and q, which are congruent to 3 - modulo 4. The product of those numbers, n, is a blum integer. - Choose another random integer, x, which is relatively prime to n. - Compute - x[0] = x^2 mod n - That's the seed for the generator." - - To generate a random bit, compute - x[i] = x[i-1]^2 mod n - The least significant bit of x[i] is the one we want. - - We can use more than one bit from x[i], namely the - log2(bitlength of x[i]) - least significant bits of x[i]. - - So, for a 32-bit seed we get 5 bits per computation. - - The non-predictability of this generator is based on the difficulty - of factoring n. - */ - -/* -------------------------------------------------- */ - -/* lc (rp, state) -- Generate next number in LC sequence. Return the - number of valid bits in the result. NOTE: If 'm' is a power of 2 - (m2exp != 0), discard the lower half of the result. */ - -static -unsigned long int -#if __STDC__ -lc (mp_ptr rp, gmp_randstate_t rstate) -#else -lc (rp, rstate) - mp_ptr rp; - gmp_randstate_t rstate; -#endif -{ - mp_ptr tp, seedp, ap; - mp_size_t ta; - mp_size_t tn, seedn, an; - mp_size_t retval; - int shiftcount = 0; - unsigned long int m2exp; - mp_limb_t c; - TMP_DECL (mark); - - m2exp = rstate->algdata.lc->m2exp; - c = (mp_limb_t) rstate->algdata.lc->c; - - seedp = PTR (rstate->seed); - seedn = SIZ (rstate->seed); - - if (seedn == 0) - { - /* Seed is 0. Result is C % M. */ - *rp = c; - - if (m2exp != 0) - { - /* M is a power of 2. */ - if (m2exp < BITS_PER_MP_LIMB) - { - /* Only necessary when M may be smaller than C. */ - *rp &= (((mp_limb_t) 1 << m2exp) - 1); - } - } - else - { - /* M is not a power of 2. */ - abort (); /* FIXME. */ - } - - /* Save result as next seed. */ - *seedp = *rp; - SIZ (rstate->seed) = 1; - return BITS_PER_MP_LIMB; - } - - ap = PTR (rstate->algdata.lc->a); - an = SIZ (rstate->algdata.lc->a); - - /* Allocate temporary storage. Let there be room for calculation of - (A * seed + C) % M, or M if bigger than that. */ - - ASSERT_ALWAYS (m2exp != 0); /* FIXME. */ - - TMP_MARK (mark); - ta = an + seedn + 1; - tp = (mp_ptr) TMP_ALLOC (ta * BYTES_PER_MP_LIMB); - MPN_ZERO (tp, ta); - - /* t = a * seed */ - if (seedn >= an) - mpn_mul_basecase (tp, seedp, seedn, ap, an); - else - mpn_mul_basecase (tp, ap, an, seedp, seedn); - tn = an + seedn; - - /* t = t + c */ - mpn_incr_u (tp, c); - - /* t = t % m */ - if (m2exp != 0) - { - /* M is a power of 2. The mod operation is trivial. */ - - tp[m2exp / BITS_PER_MP_LIMB] &= ((mp_limb_t) 1 << m2exp % BITS_PER_MP_LIMB) - 1; - tn = (m2exp + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - } - else - { - abort (); /* FIXME. */ - } - - /* Save result as next seed. */ - MPN_COPY (PTR (rstate->seed), tp, tn); - SIZ (rstate->seed) = tn; - - if (m2exp != 0) - { - /* Discard the lower half of the result. */ - unsigned long int discardb = m2exp / 2; - mp_size_t discardl = discardb / BITS_PER_MP_LIMB; - - tn -= discardl; - if (tn > 0) - { - if (discardb % BITS_PER_MP_LIMB != 0) - { - mpn_rshift (tp, tp + discardl, tn, discardb % BITS_PER_MP_LIMB); - MPN_COPY (rp, tp, (discardb + BITS_PER_MP_LIMB -1) / BITS_PER_MP_LIMB); - } - else /* Even limb boundary. */ - MPN_COPY_INCR (rp, tp + discardl, tn); - } - } - else - { - MPN_COPY (rp, tp, tn); - } - - TMP_FREE (mark); - - /* Return number of valid bits in the result. */ - if (m2exp != 0) - retval = (m2exp + 1) / 2; - else - retval = SIZ (rstate->algdata.lc->m) * BITS_PER_MP_LIMB - shiftcount; - return retval; -} - -#ifdef RAWRANDEBUG -/* Set even bits to EVENBITS and odd bits to ! EVENBITS in RP. - Number of bits is m2exp in state. */ -/* FIXME: Remove. */ -unsigned long int -lc_test (mp_ptr rp, gmp_randstate_t s, const int evenbits) -{ - unsigned long int rn, nbits; - int f; - - nbits = s->algdata.lc->m2exp / 2; - rn = nbits / BITS_PER_MP_LIMB + (nbits % BITS_PER_MP_LIMB != 0); - MPN_ZERO (rp, rn); - - for (f = 0; f < nbits; f++) - { - mpn_lshift (rp, rp, rn, 1); - if (f % 2 == ! evenbits) - rp[0] += 1; - } - - return nbits; -} -#endif /* RAWRANDEBUG */ - -void -#if __STDC__ -_gmp_rand (mp_ptr rp, gmp_randstate_t rstate, unsigned long int nbits) -#else -_gmp_rand (rp, rstate, nbits) - mp_ptr rp; - gmp_randstate_t rstate; - unsigned long int nbits; -#endif -{ - mp_size_t rn; /* Size of R. */ - - rn = (nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - - switch (rstate->alg) - { - case GMP_RAND_ALG_LC: - { - unsigned long int rbitpos; - int chunk_nbits; - mp_ptr tp; - mp_size_t tn; - TMP_DECL (lcmark); - - TMP_MARK (lcmark); - - chunk_nbits = rstate->algdata.lc->m2exp / 2; - tn = (chunk_nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - - tp = (mp_ptr) TMP_ALLOC (tn * BYTES_PER_MP_LIMB); - - rbitpos = 0; - while (rbitpos + chunk_nbits <= nbits) - { - mp_ptr r2p = rp + rbitpos / BITS_PER_MP_LIMB; - - if (rbitpos % BITS_PER_MP_LIMB != 0) - { - mp_limb_t savelimb, rcy; - /* Target of of new chunk is not bit aligned. Use temp space - and align things by shifting it up. */ - lc (tp, rstate); - savelimb = r2p[0]; - rcy = mpn_lshift (r2p, tp, tn, rbitpos % BITS_PER_MP_LIMB); - r2p[0] |= savelimb; -/* bogus */ if ((chunk_nbits % BITS_PER_MP_LIMB + rbitpos % BITS_PER_MP_LIMB) - > BITS_PER_MP_LIMB) - r2p[tn] = rcy; - } - else - { - /* Target of of new chunk is bit aligned. Let `lc' put bits - directly into our target variable. */ - lc (r2p, rstate); - } - rbitpos += chunk_nbits; - } - - /* Handle last [0..chunk_nbits) bits. */ - if (rbitpos != nbits) - { - mp_ptr r2p = rp + rbitpos / BITS_PER_MP_LIMB; - int last_nbits = nbits - rbitpos; - tn = (last_nbits + BITS_PER_MP_LIMB - 1) / BITS_PER_MP_LIMB; - lc (tp, rstate); - if (rbitpos % BITS_PER_MP_LIMB != 0) - { - mp_limb_t savelimb, rcy; - /* Target of of new chunk is not bit aligned. Use temp space - and align things by shifting it up. */ - savelimb = r2p[0]; - rcy = mpn_lshift (r2p, tp, tn, rbitpos % BITS_PER_MP_LIMB); - r2p[0] |= savelimb; - if (rbitpos + tn * BITS_PER_MP_LIMB - rbitpos % BITS_PER_MP_LIMB < nbits) - r2p[tn] = rcy; - } - else - { - MPN_COPY (r2p, tp, tn); - } - /* Mask off top bits if needed. */ - if (nbits % BITS_PER_MP_LIMB != 0) - rp[nbits / BITS_PER_MP_LIMB] - &= ~ ((~(mp_limb_t) 0) << nbits % BITS_PER_MP_LIMB); - } - - TMP_FREE (lcmark); - break; - } - - default: - gmp_errno |= GMP_ERROR_UNSUPPORTED_ARGUMENT; - break; - } -} diff --git a/rts/gmp/randsd.c b/rts/gmp/randsd.c deleted file mode 100644 index 3bed14b..0000000 --- a/rts/gmp/randsd.c +++ /dev/null @@ -1,37 +0,0 @@ -/* gmp_randseed (state, seed) -- Set initial seed SEED in random state - STATE. - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -gmp_randseed (gmp_randstate_t rstate, - mpz_t seed) -#else -gmp_randseed (rstate, seed) - gmp_randstate_t rstate; - mpz_t seed; -#endif -{ - mpz_set (rstate->seed, seed); -} diff --git a/rts/gmp/randsdui.c b/rts/gmp/randsdui.c deleted file mode 100644 index 92f412f..0000000 --- a/rts/gmp/randsdui.c +++ /dev/null @@ -1,37 +0,0 @@ -/* gmp_randseed_ui (state, seed) -- Set initial seed SEED in random - state STATE. - -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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -void -#if __STDC__ -gmp_randseed_ui (gmp_randstate_t rstate, - unsigned long int seed) -#else -gmp_randseed_ui (rstate, seed) - gmp_randstate_t rstate; - mpz_t seed; -#endif -{ - mpz_set_ui (rstate->seed, seed); -} diff --git a/rts/gmp/stack-alloc.c b/rts/gmp/stack-alloc.c deleted file mode 100644 index 9ab98fe..0000000 --- a/rts/gmp/stack-alloc.c +++ /dev/null @@ -1,136 +0,0 @@ -/* Stack allocation routines. This is intended for machines without support - for the `alloca' function. - -Copyright (C) 1996, 1997, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "stack-alloc.h" - -#define __need_size_t -#include -#undef __need_size_t - -/* gmp-impl.h and stack-alloc.h conflict when not USE_STACK_ALLOC, so these - declarations are copied here */ -#if __STDC__ -extern void * (*__gmp_allocate_func) (size_t); -extern void (*__gmp_free_func) (void *, size_t); -#else -extern void * (*__gmp_allocate_func) (); -extern void (*__gmp_free_func) (); -#endif - -typedef struct tmp_stack tmp_stack; - -static unsigned long max_total_allocation = 0; -static unsigned long current_total_allocation = 0; - -static tmp_stack xxx = {&xxx, &xxx, 0}; -static tmp_stack *current = &xxx; - -/* The rounded size of the header of each allocation block. */ -#define HSIZ ((sizeof (tmp_stack) + __TMP_ALIGN - 1) & -__TMP_ALIGN) - -/* Allocate a block of exactly bytes. This should only be called - through the TMP_ALLOC macro, which takes care of rounding/alignment. */ -void * -#if __STDC__ -__gmp_tmp_alloc (unsigned long size) -#else -__gmp_tmp_alloc (size) - unsigned long size; -#endif -{ - void *that; - - if (size > (char *) current->end - (char *) current->alloc_point) - { - void *chunk; - tmp_stack *header; - unsigned long chunk_size; - unsigned long now; - - /* Allocate a chunk that makes the total current allocation somewhat - larger than the maximum allocation ever. If size is very large, we - allocate that much. */ - - now = current_total_allocation + size; - if (now > max_total_allocation) - { - /* We need more temporary memory than ever before. Increase - for future needs. */ - now = now * 3 / 2; - chunk_size = now - current_total_allocation + HSIZ; - current_total_allocation = now; - max_total_allocation = current_total_allocation; - } - else - { - chunk_size = max_total_allocation - current_total_allocation + HSIZ; - current_total_allocation = max_total_allocation; - } - - chunk = (*__gmp_allocate_func) (chunk_size); - header = (tmp_stack *) chunk; - header->end = (char *) chunk + chunk_size; - header->alloc_point = (char *) chunk + HSIZ; - header->prev = current; - current = header; - } - - that = current->alloc_point; - current->alloc_point = (char *) that + size; - return that; -} - -/* Typically called at function entry. is assigned so that - __gmp_tmp_free can later be used to reclaim all subsequently allocated - storage. */ -void -#if __STDC__ -__gmp_tmp_mark (tmp_marker *mark) -#else -__gmp_tmp_mark (mark) - tmp_marker *mark; -#endif -{ - mark->which_chunk = current; - mark->alloc_point = current->alloc_point; -} - -/* Free everything allocated since was assigned by __gmp_tmp_mark */ -void -#if __STDC__ -__gmp_tmp_free (tmp_marker *mark) -#else -__gmp_tmp_free (mark) - tmp_marker *mark; -#endif -{ - while (mark->which_chunk != current) - { - tmp_stack *tmp; - - tmp = current; - current = tmp->prev; - current_total_allocation -= (((char *) (tmp->end) - (char *) tmp) - HSIZ); - (*__gmp_free_func) (tmp, (char *) tmp->end - (char *) tmp); - } - current->alloc_point = mark->alloc_point; -} diff --git a/rts/gmp/stack-alloc.h b/rts/gmp/stack-alloc.h deleted file mode 100644 index f59beec..0000000 --- a/rts/gmp/stack-alloc.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Stack allocation routines. This is intended for machines without support - for the `alloca' function. - -Copyright (C) 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -struct tmp_stack -{ - void *end; - void *alloc_point; - struct tmp_stack *prev; -}; - -struct tmp_marker -{ - struct tmp_stack *which_chunk; - void *alloc_point; -}; - -typedef struct tmp_marker tmp_marker; - -#if defined (__cplusplus) -extern "C" { -#endif - -#if __STDC__ -void *__gmp_tmp_alloc (unsigned long); -void __gmp_tmp_mark (tmp_marker *); -void __gmp_tmp_free (tmp_marker *); -#else -void *__gmp_tmp_alloc (); -void __gmp_tmp_mark (); -void __gmp_tmp_free (); -#endif - -#if defined (__cplusplus) -} -#endif - -#ifndef __TMP_ALIGN -#define __TMP_ALIGN 8 -#endif - -#define TMP_DECL(marker) tmp_marker marker -#define TMP_ALLOC(size) \ - __gmp_tmp_alloc (((unsigned long) (size) + __TMP_ALIGN - 1) & -__TMP_ALIGN) -#define TMP_MARK(marker) __gmp_tmp_mark (&marker) -#define TMP_FREE(marker) __gmp_tmp_free (&marker) diff --git a/rts/gmp/stamp-h.in b/rts/gmp/stamp-h.in deleted file mode 100644 index 9788f70..0000000 --- a/rts/gmp/stamp-h.in +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/rts/gmp/stamp-vti b/rts/gmp/stamp-vti deleted file mode 100644 index e318618..0000000 --- a/rts/gmp/stamp-vti +++ /dev/null @@ -1,3 +0,0 @@ -@set UPDATED 5 October 2000 -@set EDITION 3.1.1 -@set VERSION 3.1.1 diff --git a/rts/gmp/urandom.h b/rts/gmp/urandom.h deleted file mode 100644 index 313479e..0000000 --- a/rts/gmp/urandom.h +++ /dev/null @@ -1,86 +0,0 @@ -/* urandom.h -- define urandom returning a full unsigned long random value. - -Copyright (C) 1995, 1996, 1997, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#if defined (__hpux) || defined (__svr4__) || defined (__SVR4) -/* HPUX lacks random(). */ -static inline mp_limb_t -urandom () -{ - return mrand48 (); -} -#define __URANDOM -#endif - -#if defined(_WIN32) && !(defined(__CYGWIN__) || defined(__CYGWIN32__)) -/* MS CRT supplies just the poxy rand(), with an upper bound of 0x7fff */ -static inline unsigned long -urandom () -{ - return rand () ^ (rand () << 16) ^ (rand() << 32); -} -#define __URANDOM -#endif - -#if defined (__alpha) && !defined (__URANDOM) -/* DEC OSF/1 1.2 random() returns a double. */ -long mrand48 (); -static inline mp_limb_t -urandom () -{ - return mrand48 () | (mrand48 () << 32); -} -#define __URANDOM -#endif - -#if BITS_PER_MP_LIMB == 32 && !defined (__URANDOM) -#if defined (__cplusplus) -extern "C" { -#endif -long random (); -#if defined (__cplusplus) -} -#endif -static inline mp_limb_t -urandom () -{ - /* random() returns 31 bits, we want 32. */ - return random () ^ (random () << 1); -} -#define __URANDOM -#endif - -#if BITS_PER_MP_LIMB == 64 && !defined (__URANDOM) -#if defined (__cplusplus) -extern "C" { -#endif -long random (); -#if defined (__cplusplus) -} -#endif -static inline mp_limb_t -urandom () -{ - /* random() returns 31 bits, we want 64. */ - return random () ^ ((mp_limb_t) random () << 31) ^ ((mp_limb_t) random () << 62); -} -#define __URANDOM -#endif - diff --git a/rts/gmp/version.c b/rts/gmp/version.c deleted file mode 100644 index 9d544ee..0000000 --- a/rts/gmp/version.c +++ /dev/null @@ -1,26 +0,0 @@ -/* gmp_version -- version number compiled into the library */ - -/* -Copyright (C) 1996, 1999, 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 the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or (at your -option) any later version. - -The GNU MP Library is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with the GNU MP Library; see the file COPYING.LIB. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, -MA 02111-1307, USA. */ - -#include "gmp.h" -#include "gmp-impl.h" - -const char *gmp_version = VERSION; diff --git a/rts/gmp/version.texi b/rts/gmp/version.texi deleted file mode 100644 index e318618..0000000 --- a/rts/gmp/version.texi +++ /dev/null @@ -1,3 +0,0 @@ -@set UPDATED 5 October 2000 -@set EDITION 3.1.1 -@set VERSION 3.1.1 diff --git a/rts/package.conf.in b/rts/package.conf.in index 77fb192..e45ecce 100644 --- a/rts/package.conf.in +++ b/rts/package.conf.in @@ -23,7 +23,7 @@ library-dirs: LIB_DIR GMP_LIB_DIRS #else /* !INSTALLING */ library-dirs: FPTOOLS_TOP_ABS"/rts" GMP_LIB_DIRS # if !defined(HAVE_LIBGMP) && !defined(HAVE_FRAMEWORK_GMP) - , FPTOOLS_TOP_ABS"/rts/gmp" + , FPTOOLS_TOP_ABS"/gmp/gmpbuild" # endif #endif @@ -64,6 +64,8 @@ include-dirs: INCLUDE_DIR GMP_INCLUDE_DIRS # endif #else /* !INSTALLING */ include-dirs: FPTOOLS_TOP_ABS"/includes" + FPTOOLS_TOP_ABS"/rts" + FPTOOLS_TOP_ABS"/gmp/gmpbuild" #endif includes: Stg.h diff --git a/utils/hsc2hs/Makefile b/utils/hsc2hs/Makefile index b11617f..c60705f 100644 --- a/utils/hsc2hs/Makefile +++ b/utils/hsc2hs/Makefile @@ -45,7 +45,7 @@ endif $(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk echo "import System.Cmd; import System.Environment; import System.Exit" > $@ - echo "main = do args <- getArgs; rawSystem \"$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/$(HS_PROG)\" (\"--template=$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/template-hsc.h\":\"--cc=$(CC)\":\"--ld=$(CC)\"$(patsubst %,:\"%\",$(extra_flags)):\"--cflag=-D__GLASGOW_HASKELL__=$(ProjectVersionInt)\":\"-I$(TOP_ABS)/$(GHC_INCLUDE_DIR_REL)\":args) >>= exitWith" >> $@ + echo "main = do args <- getArgs; rawSystem \"$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/$(HS_PROG)\" (\"--template=$(TOP_ABS)/$(GHC_HSC2HS_DIR_REL)/template-hsc.h\":\"--cc=$(CC)\":\"--ld=$(CC)\"$(patsubst %,:\"%\",$(extra_flags)):\"--cflag=-D__GLASGOW_HASKELL__=$(ProjectVersionInt)\":\"-I$(TOP_ABS)/$(GHC_INCLUDE_DIR_REL)\":\"-I$(TOP_ABS)/gmp/gmpbuild\":args) >>= exitWith" >> $@ $(INPLACE_PROG): $(INPLACE_HS) $(GHC) --make $< -o $@ -- 1.7.10.4

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�E$&#{QZTH_5RT4jf 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