1d25e02daSmrg /* Nehalem gmp-mparam.h -- Compiler/machine parameter header file.
2d25e02daSmrg 
3*671ea119Smrg Copyright 2019 Free Software Foundation, Inc.
4d25e02daSmrg 
5d25e02daSmrg This file is part of the GNU MP Library.
6d25e02daSmrg 
7d25e02daSmrg The GNU MP Library is free software; you can redistribute it and/or modify
8f81b1c5bSmrg it under the terms of either:
9f81b1c5bSmrg 
10f81b1c5bSmrg   * the GNU Lesser General Public License as published by the Free
11f81b1c5bSmrg     Software Foundation; either version 3 of the License, or (at your
12d25e02daSmrg     option) any later version.
13d25e02daSmrg 
14f81b1c5bSmrg or
15f81b1c5bSmrg 
16f81b1c5bSmrg   * the GNU General Public License as published by the Free Software
17f81b1c5bSmrg     Foundation; either version 2 of the License, or (at your option) any
18f81b1c5bSmrg     later version.
19f81b1c5bSmrg 
20f81b1c5bSmrg or both in parallel, as here.
21f81b1c5bSmrg 
22d25e02daSmrg The GNU MP Library is distributed in the hope that it will be useful, but
23d25e02daSmrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
24f81b1c5bSmrg or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25f81b1c5bSmrg for more details.
26d25e02daSmrg 
27f81b1c5bSmrg You should have received copies of the GNU General Public License and the
28f81b1c5bSmrg GNU Lesser General Public License along with the GNU MP Library.  If not,
29f81b1c5bSmrg see https://www.gnu.org/licenses/.  */
30d25e02daSmrg 
31d25e02daSmrg #define GMP_LIMB_BITS 64
32f81b1c5bSmrg #define GMP_LIMB_BYTES 8
33d25e02daSmrg 
34*671ea119Smrg /* 2933-3200 MHz Intel Xeon X3470 Nehalem */
35*671ea119Smrg /* FFT tuning limit = 468,424,931 */
36*671ea119Smrg /* Generated by tuneup.c, 2019-10-18, gcc 8.3 */
37d25e02daSmrg 
38d25e02daSmrg #define MOD_1_NORM_THRESHOLD                 0  /* always */
39d25e02daSmrg #define MOD_1_UNNORM_THRESHOLD               0  /* always */
40d25e02daSmrg #define MOD_1N_TO_MOD_1_1_THRESHOLD          3
41f81b1c5bSmrg #define MOD_1U_TO_MOD_1_1_THRESHOLD          2
42d25e02daSmrg #define MOD_1_1_TO_MOD_1_2_THRESHOLD        11
43d25e02daSmrg #define MOD_1_2_TO_MOD_1_4_THRESHOLD        16
44*671ea119Smrg #define PREINV_MOD_1_TO_MOD_1_THRESHOLD      7
45d25e02daSmrg #define USE_PREINV_DIVREM_1                  1  /* native */
46f81b1c5bSmrg #define DIV_QR_1_NORM_THRESHOLD              1
47f81b1c5bSmrg #define DIV_QR_1_UNNORM_THRESHOLD        MP_SIZE_T_MAX  /* never */
48*671ea119Smrg #define DIV_QR_2_PI2_THRESHOLD              10
49d25e02daSmrg #define DIVEXACT_1_THRESHOLD                 0  /* always (native) */
50*671ea119Smrg #define BMOD_1_TO_MOD_1_THRESHOLD           17
51*671ea119Smrg 
52*671ea119Smrg #define DIV_1_VS_MUL_1_PERCENT             301
53d25e02daSmrg 
54d25e02daSmrg #define MUL_TOOM22_THRESHOLD                18
55*671ea119Smrg #define MUL_TOOM33_THRESHOLD                59
56d25e02daSmrg #define MUL_TOOM44_THRESHOLD               169
57*671ea119Smrg #define MUL_TOOM6H_THRESHOLD               230
58*671ea119Smrg #define MUL_TOOM8H_THRESHOLD               333
59d25e02daSmrg 
60*671ea119Smrg #define MUL_TOOM32_TO_TOOM43_THRESHOLD      97
61*671ea119Smrg #define MUL_TOOM32_TO_TOOM53_THRESHOLD     110
62*671ea119Smrg #define MUL_TOOM42_TO_TOOM53_THRESHOLD     104
63*671ea119Smrg #define MUL_TOOM42_TO_TOOM63_THRESHOLD     101
64*671ea119Smrg #define MUL_TOOM43_TO_TOOM54_THRESHOLD     147
65d25e02daSmrg 
66d25e02daSmrg #define SQR_BASECASE_THRESHOLD               0  /* always (native) */
67f81b1c5bSmrg #define SQR_TOOM2_THRESHOLD                 28
68*671ea119Smrg #define SQR_TOOM3_THRESHOLD                 98
69d25e02daSmrg #define SQR_TOOM4_THRESHOLD                250
70*671ea119Smrg #define SQR_TOOM6_THRESHOLD                351
71*671ea119Smrg #define SQR_TOOM8_THRESHOLD                478
72d25e02daSmrg 
73f81b1c5bSmrg #define MULMID_TOOM42_THRESHOLD             28
74d25e02daSmrg 
75*671ea119Smrg #define MULMOD_BNM1_THRESHOLD               13
76d25e02daSmrg #define SQRMOD_BNM1_THRESHOLD               13
77d25e02daSmrg 
78*671ea119Smrg #define MUL_FFT_MODF_THRESHOLD             372  /* k = 5 */
79d25e02daSmrg #define MUL_FFT_TABLE3                                      \
80*671ea119Smrg   { {    372, 5}, {     17, 6}, {      9, 5}, {     19, 6}, \
81*671ea119Smrg     {     10, 5}, {     21, 6}, {     21, 7}, {     11, 6}, \
82*671ea119Smrg     {     23, 7}, {     21, 8}, {     11, 7}, {     24, 8}, \
83*671ea119Smrg     {     13, 7}, {     27, 8}, {     15, 7}, {     31, 8}, \
84*671ea119Smrg     {     21, 9}, {     11, 8}, {     27, 9}, {     15, 8}, \
85*671ea119Smrg     {     33, 9}, {     19, 8}, {     39, 9}, {     23, 8}, \
86*671ea119Smrg     {     47, 9}, {     27,10}, {     15, 9}, {     39,10}, \
87*671ea119Smrg     {     23, 9}, {     51,11}, {     15,10}, {     31, 9}, \
88*671ea119Smrg     {     67,10}, {     39, 9}, {     83,10}, {     47, 9}, \
89*671ea119Smrg     {     95,10}, {     55,11}, {     31,10}, {     79,11}, \
90*671ea119Smrg     {     47,10}, {     95,12}, {     31, 8}, {    511,10}, \
91f81b1c5bSmrg     {    135,11}, {     79,10}, {    159, 9}, {    319,11}, \
92*671ea119Smrg     {     95,10}, {    191, 9}, {    383,12}, {     63,11}, \
93*671ea119Smrg     {    127,10}, {    255, 9}, {    511,11}, {    143,10}, \
94*671ea119Smrg     {    287, 9}, {    575,10}, {    303,11}, {    159,10}, \
95*671ea119Smrg     {    319,12}, {     95,11}, {    191,10}, {    383,13}, \
96*671ea119Smrg     {     63,12}, {    127,11}, {    255,10}, {    511,11}, \
97*671ea119Smrg     {    271,10}, {    543,11}, {    287,10}, {    575,11}, \
98*671ea119Smrg     {    303,10}, {    607,11}, {    319,10}, {    639,11}, \
99*671ea119Smrg     {    351,10}, {    703,12}, {    191,11}, {    383,10}, \
100*671ea119Smrg     {    767,11}, {    415,10}, {    831,12}, {    223,11}, \
101*671ea119Smrg     {    447,10}, {    895,13}, {    127,12}, {    255,11}, \
102*671ea119Smrg     {    543,12}, {    287,11}, {    607,12}, {    319,11}, \
103*671ea119Smrg     {    639,12}, {    351,11}, {    703,13}, {    191,12}, \
104*671ea119Smrg     {    383,11}, {    767,12}, {    415,11}, {    831,12}, \
105*671ea119Smrg     {    447,11}, {    895,12}, {    479,14}, {    127,13}, \
106*671ea119Smrg     {    255,12}, {    543,11}, {   1087,12}, {    607,13}, \
107*671ea119Smrg     {    319,12}, {    703,13}, {    383,12}, {    831,13}, \
108*671ea119Smrg     {    447,12}, {    959,14}, {    255,13}, {    511,12}, \
109*671ea119Smrg     {   1087,13}, {    575,12}, {   1215,11}, {   2431,13}, \
110*671ea119Smrg     {    639,12}, {   1279,13}, {    703,12}, {   1407,14}, \
111*671ea119Smrg     {    383,13}, {    831,12}, {   1663,13}, {    959,14}, \
112*671ea119Smrg     {    511,13}, {   1087,12}, {   2175,13}, {   1215,12}, \
113*671ea119Smrg     {   2431,14}, {    639,13}, {   1343,12}, {   2687,13}, \
114*671ea119Smrg     {   1407,12}, {   2815,13}, {   1471,14}, {    767,13}, \
115*671ea119Smrg     {   1663,14}, {    895,13}, {   1791,15}, {    511,14}, \
116*671ea119Smrg     {   1023,13}, {   2175,14}, {   1151,13}, {   2431,12}, \
117*671ea119Smrg     {   4863,14}, {   1279,13}, {   2687,14}, {   1407,13}, \
118*671ea119Smrg     {   2815,15}, {    767,14}, {   1663,13}, {   3455,14}, \
119*671ea119Smrg     {   1919,16}, {    511,15}, {   1023,14}, {   2431,13}, \
120f81b1c5bSmrg     {   4863,15}, {   1279,14}, {   2943,13}, {   5887,15}, \
121f81b1c5bSmrg     {   1535,14}, {   3455,15}, {   1791,14}, {   3839,16}, \
122f81b1c5bSmrg     {   1023,15}, {   2047,14}, {   4223,15}, {   2303,14}, \
123f81b1c5bSmrg     {   4863,15}, {   2815,14}, {   5887,16}, {   1535,15}, \
124f81b1c5bSmrg     {   3327,14}, {   6911,15}, {   3839,17}, {   1023,16}, \
125f81b1c5bSmrg     {   2047,15}, {   4863,16}, {   2559,15}, {   5887,14}, \
126*671ea119Smrg     {  11775,16}, {   3071,15}, {   6911,16}, {   3583,15}, \
127*671ea119Smrg     {   7679,14}, {  15359,17}, {   2047,16}, {   4607,15}, \
128*671ea119Smrg     {   9983,16}, {   5631,15}, {  11775,17}, {   3071,16}, \
129*671ea119Smrg     {  65536,17}, { 131072,18}, { 262144,19}, { 524288,20}, \
130*671ea119Smrg     {1048576,21}, {2097152,22}, {4194304,23}, {8388608,24} }
131*671ea119Smrg #define MUL_FFT_TABLE3_SIZE 204
132f81b1c5bSmrg #define MUL_FFT_THRESHOLD                 4224
133d25e02daSmrg 
134*671ea119Smrg #define SQR_FFT_MODF_THRESHOLD             336  /* k = 5 */
135d25e02daSmrg #define SQR_FFT_TABLE3                                      \
136*671ea119Smrg   { {    336, 5}, {     19, 6}, {     10, 5}, {     21, 6}, \
137d25e02daSmrg     {     21, 7}, {     11, 6}, {     23, 7}, {     21, 8}, \
138*671ea119Smrg     {     11, 7}, {     25, 8}, {     13, 7}, {     27, 8}, \
139d25e02daSmrg     {     15, 7}, {     31, 8}, {     21, 9}, {     11, 8}, \
140d25e02daSmrg     {     27, 9}, {     15, 8}, {     33, 9}, {     19, 8}, \
141*671ea119Smrg     {     39, 9}, {     23, 8}, {     47, 9}, {     27,10}, \
142d25e02daSmrg     {     15, 9}, {     39,10}, {     23, 9}, {     47,11}, \
143*671ea119Smrg     {     15,10}, {     31, 9}, {     67,10}, {     39, 9}, \
144*671ea119Smrg     {     79,10}, {     47,11}, {     31,10}, {     79,11}, \
145*671ea119Smrg     {     47,10}, {     95,12}, {     31,11}, {     63,10}, \
146*671ea119Smrg     {    127, 9}, {    255, 8}, {    511,10}, {    135,11}, \
147*671ea119Smrg     {     79, 9}, {    319, 6}, {   2687, 7}, {   1407, 9}, \
148*671ea119Smrg     {    383,12}, {     63,11}, {    127,10}, {    255, 9}, \
149*671ea119Smrg     {    511,10}, {    271, 9}, {    543,11}, {    143,10}, \
150*671ea119Smrg     {    287, 9}, {    575,10}, {    303, 9}, {    607,10}, \
151*671ea119Smrg     {    319,12}, {     95,11}, {    191,10}, {    383,13}, \
152*671ea119Smrg     {     63,12}, {    127,11}, {    255,10}, {    511,11}, \
153*671ea119Smrg     {    271,10}, {    543,11}, {    287,10}, {    575,11}, \
154*671ea119Smrg     {    303,10}, {    607,11}, {    319,10}, {    639,11}, \
155*671ea119Smrg     {    351,10}, {    703,12}, {    191,11}, {    383,10}, \
156*671ea119Smrg     {    767,11}, {    415,10}, {    831,12}, {    223,11}, \
157*671ea119Smrg     {    447,10}, {    895,11}, {    479,13}, {    127,12}, \
158*671ea119Smrg     {    255,11}, {    511,10}, {   1023,11}, {    543,12}, \
159*671ea119Smrg     {    287,11}, {    607,12}, {    319,11}, {    671,12}, \
160*671ea119Smrg     {    351,11}, {    703,13}, {    191,12}, {    383,11}, \
161*671ea119Smrg     {    767,12}, {    415,11}, {    831,12}, {    447,11}, \
162*671ea119Smrg     {    895,12}, {    479,14}, {    127,13}, {    255,12}, \
163*671ea119Smrg     {    511,11}, {   1023,12}, {    543,11}, {   1087,12}, \
164*671ea119Smrg     {    575,11}, {   1151,12}, {    607,13}, {    319,12}, \
165*671ea119Smrg     {    671,11}, {   1343,12}, {    703,13}, {    383,12}, \
166*671ea119Smrg     {    767,11}, {   1535,12}, {    831,13}, {    447,12}, \
167*671ea119Smrg     {    959,13}, {    511,12}, {   1087,13}, {    575,12}, \
168*671ea119Smrg     {   1215,11}, {   2431,13}, {    639,12}, {   1343,13}, \
169*671ea119Smrg     {    703,14}, {    383,13}, {    767,12}, {   1535,13}, \
170*671ea119Smrg     {    831,12}, {   1663,13}, {    959,14}, {    511,13}, \
171*671ea119Smrg     {   1087,12}, {   2175,13}, {   1215,12}, {   2431,14}, \
172f81b1c5bSmrg     {    639,13}, {   1343,12}, {   2687,13}, {   1407,12}, \
173*671ea119Smrg     {   2815,13}, {   1471,14}, {    767,13}, {   1663,14}, \
174*671ea119Smrg     {    895,13}, {   1791,15}, {    511,14}, {   1023,13}, \
175*671ea119Smrg     {   2175,14}, {   1151,13}, {   2431,12}, {   4863,14}, \
176*671ea119Smrg     {   1279,13}, {   2687,14}, {   1407,13}, {   2815,15}, \
177*671ea119Smrg     {    767,14}, {   1535,13}, {   3071,14}, {   1663,13}, \
178*671ea119Smrg     {   3455,14}, {   1919,16}, {    511,15}, {   1023,14}, \
179*671ea119Smrg     {   2431,13}, {   4863,15}, {   1279,14}, {   2943,13}, \
180*671ea119Smrg     {   5887,15}, {   1535,14}, {   3455,15}, {   1791,14}, \
181*671ea119Smrg     {   3839,16}, {   1023,15}, {   2047,14}, {   4223,15}, \
182*671ea119Smrg     {   2303,14}, {   4863,15}, {   2815,14}, {   5887,16}, \
183*671ea119Smrg     {   1535,15}, {   3327,14}, {   6911,15}, {   3839,17}, \
184*671ea119Smrg     {   1023,16}, {   2047,15}, {   4863,16}, {   2559,15}, \
185*671ea119Smrg     {   5887,14}, {  11775,16}, {   3071,15}, {   6655,16}, \
186*671ea119Smrg     {   3583,15}, {   7679,14}, {  15359,17}, {   2047,16}, \
187*671ea119Smrg     {   4607,15}, {   9983,14}, {  19967,16}, {   5631,15}, \
188*671ea119Smrg     {  11775,17}, {   3071,16}, {  65536,17}, { 131072,18}, \
189*671ea119Smrg     { 262144,19}, { 524288,20}, {1048576,21}, {2097152,22}, \
190*671ea119Smrg     {4194304,23}, {8388608,24} }
191*671ea119Smrg #define SQR_FFT_TABLE3_SIZE 218
192f81b1c5bSmrg #define SQR_FFT_THRESHOLD                 3520
193d25e02daSmrg 
194d25e02daSmrg #define MULLO_BASECASE_THRESHOLD             0  /* always */
195*671ea119Smrg #define MULLO_DC_THRESHOLD                  49
196f81b1c5bSmrg #define MULLO_MUL_N_THRESHOLD             8397
197*671ea119Smrg #define SQRLO_BASECASE_THRESHOLD            10
198*671ea119Smrg #define SQRLO_DC_THRESHOLD                  11
199f81b1c5bSmrg #define SQRLO_SQR_THRESHOLD               7035
200d25e02daSmrg 
201*671ea119Smrg #define DC_DIV_QR_THRESHOLD                 47
202*671ea119Smrg #define DC_DIVAPPR_Q_THRESHOLD             151
203*671ea119Smrg #define DC_BDIV_QR_THRESHOLD                40
204f81b1c5bSmrg #define DC_BDIV_Q_THRESHOLD                 30
205d25e02daSmrg 
206f81b1c5bSmrg #define INV_MULMOD_BNM1_THRESHOLD           34
207*671ea119Smrg #define INV_NEWTON_THRESHOLD               199
208*671ea119Smrg #define INV_APPR_THRESHOLD                 157
209d25e02daSmrg 
210*671ea119Smrg #define BINV_NEWTON_THRESHOLD              254
211*671ea119Smrg #define REDC_1_TO_REDC_N_THRESHOLD          48
212d25e02daSmrg 
213*671ea119Smrg #define MU_DIV_QR_THRESHOLD               1334
214f81b1c5bSmrg #define MU_DIVAPPR_Q_THRESHOLD            1334
215*671ea119Smrg #define MUPI_DIV_QR_THRESHOLD               83
216f81b1c5bSmrg #define MU_BDIV_QR_THRESHOLD              1142
217*671ea119Smrg #define MU_BDIV_Q_THRESHOLD               1308
218d25e02daSmrg 
219*671ea119Smrg #define POWM_SEC_TABLE  1,64,66,452,1486
220d25e02daSmrg 
221*671ea119Smrg #define GET_STR_DC_THRESHOLD                11
222*671ea119Smrg #define GET_STR_PRECOMPUTE_THRESHOLD        18
223*671ea119Smrg #define SET_STR_DC_THRESHOLD               141
224*671ea119Smrg #define SET_STR_PRECOMPUTE_THRESHOLD      1023
225d25e02daSmrg 
226*671ea119Smrg #define FAC_DSC_THRESHOLD                  182
227*671ea119Smrg #define FAC_ODD_THRESHOLD                    0  /* always */
228f81b1c5bSmrg 
229*671ea119Smrg #define MATRIX22_STRASSEN_THRESHOLD         19
230*671ea119Smrg #define HGCD2_DIV1_METHOD                    5  /* 2.91% faster than 3 */
231*671ea119Smrg #define HGCD_THRESHOLD                     116
232*671ea119Smrg #define HGCD_APPR_THRESHOLD                164
233f81b1c5bSmrg #define HGCD_REDUCE_THRESHOLD             2205
234*671ea119Smrg #define GCD_DC_THRESHOLD                   321
235*671ea119Smrg #define GCDEXT_DC_THRESHOLD                358
236*671ea119Smrg #define JACOBI_BASE_METHOD                   4  /* 0.12% faster than 1 */
237*671ea119Smrg 
238*671ea119Smrg /* Tuneup completed successfully, took 452116 seconds */
239