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