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