118579Sfenner/* gmp-mparam.h -- Compiler/machine parameter header file. 2100787Sfenner 318579SfennerCopyright 2019 Free Software Foundation, Inc. 418579Sfenner 518579SfennerThis file is part of the GNU MP Library. 618579Sfenner 718579SfennerThe GNU MP Library is free software; you can redistribute it and/or modify 818579Sfennerit under the terms of either: 918579Sfenner 1018579Sfenner * the GNU Lesser General Public License as published by the Free 1118579Sfenner Software Foundation; either version 3 of the License, or (at your 1218579Sfenner option) any later version. 1318579Sfenner 1418579Sfenneror 1518579Sfenner 1618579Sfenner * the GNU General Public License as published by the Free Software 1718579Sfenner Foundation; either version 2 of the License, or (at your option) any 1818579Sfenner later version. 1918579Sfenner 2018579Sfenneror both in parallel, as here. 2118579Sfenner 2218579SfennerThe GNU MP Library is distributed in the hope that it will be useful, but 2318579SfennerWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24100787Sfenneror FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2518579Sfennerfor more details. 2658835Sshin 2718579SfennerYou should have received copies of the GNU General Public License and the 28100787SfennerGNU Lesser General Public License along with the GNU MP Library. If not, 2918579Sfennersee https://www.gnu.org/licenses/. */ 3058835Sshin 3158835Sshin#define GMP_LIMB_BITS 32 3258835Sshin#define GMP_LIMB_BYTES 4 3318579Sfenner 3418579Sfenner/* 1800 MHz Cortex-A17 with Neon (in spite of file position) */ 3518579Sfenner/* FFT tuning limit = 51243975 */ 3618579Sfenner/* Generated by tuneup.c, 2019-10-29, gcc 6.3 */ 3718579Sfenner 3818579Sfenner#define MOD_1_NORM_THRESHOLD 0 /* always */ 3918579Sfenner#define MOD_1_UNNORM_THRESHOLD 0 /* always */ 4018579Sfenner#define MOD_1N_TO_MOD_1_1_THRESHOLD 5 4118579Sfenner#define MOD_1U_TO_MOD_1_1_THRESHOLD 3 4218579Sfenner#define MOD_1_1_TO_MOD_1_2_THRESHOLD 8 4377816Sru#define MOD_1_2_TO_MOD_1_4_THRESHOLD MP_SIZE_T_MAX 4477816Sru#define PREINV_MOD_1_TO_MOD_1_THRESHOLD 12 4577816Sru#define USE_PREINV_DIVREM_1 1 /* native */ 4618579Sfenner#define DIV_QR_1N_PI1_METHOD 1 /* 54.08% faster than 2 */ 4718579Sfenner#define DIV_QR_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */ 4818579Sfenner#define DIV_QR_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */ 4918579Sfenner#define DIV_QR_2_PI2_THRESHOLD MP_SIZE_T_MAX /* never */ 5018579Sfenner#define DIVEXACT_1_THRESHOLD 0 /* always (native) */ 5118579Sfenner#define BMOD_1_TO_MOD_1_THRESHOLD 45 5218579Sfenner 5318579Sfenner#define DIV_1_VS_MUL_1_PERCENT 248 5418579Sfenner 5518579Sfenner#define MUL_TOOM22_THRESHOLD 38 5618579Sfenner#define MUL_TOOM33_THRESHOLD 132 5718579Sfenner#define MUL_TOOM44_THRESHOLD 200 5818579Sfenner#define MUL_TOOM6H_THRESHOLD 303 5918579Sfenner#define MUL_TOOM8H_THRESHOLD 478 6077816Sru 6118579Sfenner#define MUL_TOOM32_TO_TOOM43_THRESHOLD 137 6218579Sfenner#define MUL_TOOM32_TO_TOOM53_THRESHOLD 179 6318579Sfenner#define MUL_TOOM42_TO_TOOM53_THRESHOLD 132 6418579Sfenner#define MUL_TOOM42_TO_TOOM63_THRESHOLD 145 6518579Sfenner#define MUL_TOOM43_TO_TOOM54_THRESHOLD 191 6618579Sfenner 6718579Sfenner#define SQR_BASECASE_THRESHOLD 0 /* always (native) */ 6818579Sfenner#define SQR_TOOM2_THRESHOLD 62 6918579Sfenner#define SQR_TOOM3_THRESHOLD 189 7018579Sfenner#define SQR_TOOM4_THRESHOLD 354 7118579Sfenner#define SQR_TOOM6_THRESHOLD 426 7218579Sfenner#define SQR_TOOM8_THRESHOLD 608 7318579Sfenner 7418579Sfenner#define MULMID_TOOM42_THRESHOLD 62 7518579Sfenner 7618579Sfenner#define MULMOD_BNM1_THRESHOLD 21 7718579Sfenner#define SQRMOD_BNM1_THRESHOLD 29 7818579Sfenner 7918579Sfenner#define MUL_FFT_MODF_THRESHOLD 595 /* k = 5 */ 8077816Sru#define MUL_FFT_TABLE3 \ 8118579Sfenner { { 595, 5}, { 29, 6}, { 15, 5}, { 31, 6}, \ 8218579Sfenner { 16, 5}, { 33, 6}, { 29, 7}, { 15, 6}, \ 8318579Sfenner { 33, 7}, { 17, 6}, { 36, 7}, { 19, 6}, \ 8418579Sfenner { 39, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ 8518579Sfenner { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ 8618579Sfenner { 27, 7}, { 55, 9}, { 15, 8}, { 31, 7}, \ 8718579Sfenner { 63, 8}, { 43, 9}, { 23, 8}, { 55, 9}, \ 8818579Sfenner { 31, 8}, { 63, 9}, { 39, 8}, { 83, 9}, \ 8918579Sfenner { 47, 8}, { 95, 9}, { 55,10}, { 31, 9}, \ 9018579Sfenner { 79,10}, { 47, 9}, { 103,11}, { 31,10}, \ 9118579Sfenner { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ 9218579Sfenner { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ 9318579Sfenner { 143, 8}, { 575,10}, { 159,11}, { 95,10}, \ 9418579Sfenner { 191, 9}, { 383, 8}, { 767, 9}, { 399, 8}, \ 9518579Sfenner { 799,12}, { 63,11}, { 127,10}, { 255, 9}, \ 9618579Sfenner { 511, 8}, { 1023, 9}, { 543, 8}, { 1087, 9}, \ 9718579Sfenner { 575,10}, { 303,11}, { 159,10}, { 319, 9}, \ 9818579Sfenner { 639,10}, { 335, 9}, { 671,10}, { 351, 9}, \ 9918579Sfenner { 703,10}, { 367, 9}, { 735,11}, { 191,10}, \ 10018579Sfenner { 383, 9}, { 767,10}, { 399, 9}, { 799,10}, \ 10118579Sfenner { 415, 9}, { 831,10}, { 431, 9}, { 863,11}, \ 10218579Sfenner { 223,10}, { 447,12}, { 127,10}, { 511, 9}, \ 10318579Sfenner { 1023,10}, { 543, 9}, { 1087,10}, { 607, 9}, \ 10418579Sfenner { 1215,11}, { 319,10}, { 671, 9}, { 1343,11}, \ 10518579Sfenner { 351,10}, { 735,12}, { 191,11}, { 383,10}, \ 10618579Sfenner { 799,11}, { 415,10}, { 863,11}, { 447,10}, \ 10718579Sfenner { 895,13}, { 127,11}, { 511,10}, { 1023,11}, \ 10818579Sfenner { 543,10}, { 1087,11}, { 607,10}, { 1215,12}, \ 10918579Sfenner { 319,11}, { 671,10}, { 1343,11}, { 735,10}, \ 11018579Sfenner { 1471,12}, { 383,11}, { 799,10}, { 1599,11}, \ 11118579Sfenner { 863,10}, { 1727,12}, { 447,11}, { 991,10}, \ 11218579Sfenner { 1983,12}, { 511,11}, { 1087,12}, { 575,11}, \ 11318579Sfenner { 1215,10}, { 2431,12}, { 639,11}, { 1343,12}, \ 11418579Sfenner { 703,11}, { 1471,13}, { 383,12}, { 767,11}, \ 11518579Sfenner { 1599,12}, { 831,11}, { 1727,12}, { 959,11}, \ 11618579Sfenner { 1983,13}, { 511,12}, { 1087,11}, { 2239,12}, \ 11718579Sfenner { 1215,11}, { 2431,13}, { 639,12}, { 1471,11}, \ 11818579Sfenner { 2943,13}, { 767,12}, { 1727,13}, { 895,12}, \ 11918579Sfenner { 1983,14}, { 511,13}, { 1023,12}, { 2239,13}, \ 12018579Sfenner { 1151,12}, { 2495,13}, { 1279,12}, { 2623,13}, \ 12118579Sfenner { 1407,12}, { 2943,14}, { 767,13}, { 1535,12}, \ 12218579Sfenner { 3135,13}, { 1663,12}, { 3455,13}, { 1919,12}, \ 12318579Sfenner { 3839,15}, { 511,14}, { 1023,13}, { 2175,12}, \ 12418579Sfenner { 4479,13}, { 2431,14}, { 1279,13}, { 2943,12}, \ 12518579Sfenner { 5887,14}, { 1535,13}, { 3455,14}, { 1791,13}, \ 12618579Sfenner { 3967,15}, { 1023,14}, { 2047,13}, { 4479,14}, \ 12718579Sfenner { 2303,13}, { 4991,12}, { 9983,14}, { 2559,13}, \ 12818579Sfenner { 5247,14}, { 2815,13}, { 5887,15}, { 1535,14}, \ 12918579Sfenner { 16384,15}, { 32768,16} } 13018579Sfenner#define MUL_FFT_TABLE3_SIZE 194 13118579Sfenner#define MUL_FFT_THRESHOLD 6784 13218579Sfenner 13318579Sfenner#define SQR_FFT_MODF_THRESHOLD 500 /* k = 5 */ 13418579Sfenner#define SQR_FFT_TABLE3 \ 13518579Sfenner { { 500, 5}, { 29, 6}, { 15, 5}, { 31, 6}, \ 13618579Sfenner { 16, 5}, { 33, 6}, { 29, 7}, { 15, 6}, \ 13718579Sfenner { 32, 7}, { 17, 6}, { 36, 7}, { 19, 6}, \ 13818579Sfenner { 39, 7}, { 29, 8}, { 15, 7}, { 35, 8}, \ 13918579Sfenner { 19, 7}, { 41, 8}, { 23, 7}, { 49, 8}, \ 14018579Sfenner { 27, 9}, { 15, 8}, { 31, 7}, { 63, 8}, \ 14118579Sfenner { 43, 9}, { 23, 8}, { 55,10}, { 15, 9}, \ 14218579Sfenner { 31, 8}, { 67, 9}, { 39, 8}, { 79, 9}, \ 14318579Sfenner { 47, 8}, { 95, 9}, { 55,10}, { 31, 9}, \ 14418579Sfenner { 79,10}, { 47, 9}, { 95,11}, { 31,10}, \ 14518579Sfenner { 63, 9}, { 135,10}, { 79, 9}, { 159,10}, \ 14618579Sfenner { 95, 9}, { 191,10}, { 111,11}, { 63,10}, \ 14718579Sfenner { 127, 9}, { 255,10}, { 143, 9}, { 287,10}, \ 14818579Sfenner { 159, 9}, { 319,11}, { 95,10}, { 191, 9}, \ 14918579Sfenner { 383, 8}, { 767, 9}, { 399,12}, { 63,11}, \ 15018579Sfenner { 127,10}, { 255, 9}, { 511,10}, { 271, 9}, \ 15118579Sfenner { 543,10}, { 287, 9}, { 575,10}, { 303,11}, \ 15218579Sfenner { 159,10}, { 319, 9}, { 639,10}, { 335, 9}, \ 15318579Sfenner { 671,10}, { 351, 9}, { 703,10}, { 367, 9}, \ 15418579Sfenner { 735,11}, { 191,10}, { 383, 9}, { 767,10}, \ 15518579Sfenner { 399, 9}, { 799,10}, { 415, 9}, { 831,10}, \ 15618579Sfenner { 431, 9}, { 863,10}, { 447,12}, { 127,11}, \ 15718579Sfenner { 255,10}, { 511, 9}, { 1023,10}, { 543, 9}, \ 15818579Sfenner { 1087,11}, { 287,10}, { 607, 9}, { 1215,11}, \ 15918579Sfenner { 319,10}, { 671,11}, { 351,10}, { 735,12}, \ 16018579Sfenner { 191,11}, { 383,10}, { 799,11}, { 415,10}, \ 16118579Sfenner { 863,11}, { 447,10}, { 895,13}, { 127,12}, \ 16218579Sfenner { 255,11}, { 511,10}, { 1023,11}, { 543,10}, \ 16318579Sfenner { 1087,11}, { 607,10}, { 1215,12}, { 319,11}, \ 16418579Sfenner { 671,10}, { 1343,11}, { 735,10}, { 1471,12}, \ 16518579Sfenner { 383,11}, { 799,10}, { 1599,11}, { 863,12}, \ 16618579Sfenner { 447,11}, { 959,10}, { 1919,11}, { 991,13}, \ 16718579Sfenner { 255,12}, { 511,11}, { 1087,12}, { 575,11}, \ 16818579Sfenner { 1215,10}, { 2431,12}, { 639,11}, { 1343,12}, \ 16918579Sfenner { 703,11}, { 1471,13}, { 383,12}, { 767,11}, \ 17018579Sfenner { 1599,12}, { 831,11}, { 1727,12}, { 959,11}, \ 17118579Sfenner { 1919,14}, { 255,13}, { 511,12}, { 1087,11}, \ 17218579Sfenner { 2239,12}, { 1215,11}, { 2431,13}, { 639,12}, \ 17318579Sfenner { 1471,11}, { 2943,13}, { 767,12}, { 1727,13}, \ 17418579Sfenner { 895,12}, { 1983,14}, { 511,13}, { 1023,12}, \ 17518579Sfenner { 2239,13}, { 1151,12}, { 2495,13}, { 1279,12}, \ 17618579Sfenner { 2623,13}, { 1407,12}, { 2943,14}, { 767,13}, \ 17718579Sfenner { 1535,12}, { 3071,13}, { 1663,12}, { 3455,13}, \ 17818579Sfenner { 1919,12}, { 3839,15}, { 511,14}, { 1023,13}, \ 17918579Sfenner { 2175,12}, { 4479,13}, { 2431,14}, { 1279,13}, \ 18018579Sfenner { 2943,12}, { 5887,14}, { 1535,13}, { 3455,14}, \ 18118579Sfenner { 1791,13}, { 3967,15}, { 1023,14}, { 2047,13}, \ 18218579Sfenner { 4479,14}, { 2303,13}, { 4991,12}, { 9983,14}, \ 18318579Sfenner { 2559,13}, { 5119,14}, { 2815,13}, { 5887,15}, \ 18418579Sfenner { 1535,14}, { 16384,15}, { 32768,16} } 18518579Sfenner#define SQR_FFT_TABLE3_SIZE 199 18618579Sfenner#define SQR_FFT_THRESHOLD 4736 18718579Sfenner 18818579Sfenner#define MULLO_BASECASE_THRESHOLD 0 /* always */ 18918579Sfenner#define MULLO_DC_THRESHOLD 27 19018579Sfenner#define MULLO_MUL_N_THRESHOLD 13463 19118579Sfenner#define SQRLO_BASECASE_THRESHOLD 0 /* always */ 19218579Sfenner#define SQRLO_DC_THRESHOLD 26 19318579Sfenner#define SQRLO_SQR_THRESHOLD 8907 19418579Sfenner 19518579Sfenner#define DC_DIV_QR_THRESHOLD 38 19618579Sfenner#define DC_DIVAPPR_Q_THRESHOLD 103 19718579Sfenner#define DC_BDIV_QR_THRESHOLD 44 19818579Sfenner#define DC_BDIV_Q_THRESHOLD 98 19918579Sfenner 20018579Sfenner#define INV_MULMOD_BNM1_THRESHOLD 78 20118579Sfenner#define INV_NEWTON_THRESHOLD 165 20218579Sfenner#define INV_APPR_THRESHOLD 115 20318579Sfenner 20418579Sfenner#define BINV_NEWTON_THRESHOLD 296 20518579Sfenner#define REDC_1_TO_REDC_2_THRESHOLD 2 20618579Sfenner#define REDC_2_TO_REDC_N_THRESHOLD 147 20718579Sfenner 20818579Sfenner#define MU_DIV_QR_THRESHOLD 2089 20918579Sfenner#define MU_DIVAPPR_Q_THRESHOLD 2089 21018579Sfenner#define MUPI_DIV_QR_THRESHOLD 70 21118579Sfenner#define MU_BDIV_QR_THRESHOLD 1718 21277816Sru#define MU_BDIV_Q_THRESHOLD 2089 21377816Sru 21477816Sru#define POWM_SEC_TABLE 7,19,107,480,1486 21518579Sfenner 21618579Sfenner#define GET_STR_DC_THRESHOLD 14 21718579Sfenner#define GET_STR_PRECOMPUTE_THRESHOLD 29 21818579Sfenner#define SET_STR_DC_THRESHOLD 126 21918579Sfenner#define SET_STR_PRECOMPUTE_THRESHOLD 541 22018579Sfenner 22118579Sfenner#define FAC_DSC_THRESHOLD 132 222283958Stuexen#define FAC_ODD_THRESHOLD 29 22318579Sfenner 22446542Sarchie#define MATRIX22_STRASSEN_THRESHOLD 30 225100789Sfenner#define HGCD2_DIV1_METHOD 1 /* 6.55% faster than 3 */ 22618579Sfenner#define HGCD_THRESHOLD 54 22718579Sfenner#define HGCD_APPR_THRESHOLD 52 22818579Sfenner#define HGCD_REDUCE_THRESHOLD 3524 22958804Sshin#define GCD_DC_THRESHOLD 303 23058804Sshin#define GCDEXT_DC_THRESHOLD 225 231171135Sgnn#define JACOBI_BASE_METHOD 4 /* 9.73% faster than 1 */ 23258804Sshin 23358804Sshin/* Tuneup completed successfully, took 111418 seconds */ 23418579Sfenner