@@ -165,13 +165,21 @@ AC_ARG_WITH([ecmult-window], [AS_HELP_STRING([--with-ecmult-window=SIZE|auto],
165
165
) ] ,
166
166
[ req_ecmult_window=$withval] , [ req_ecmult_window=auto] )
167
167
168
- AC_ARG_WITH ( [ ecmult-gen-precision ] , [ AS_HELP_STRING ( [ --with-ecmult-gen-precision=2|4|8 |auto] ,
169
- [ Precision bits to tune the precomputed table size for signing .]
170
- [ The size of the table is 32kB for 2 bits, 64kB for 4 bits, 512kB for 8 bits of precision .]
171
- [ A larger table size usually results in possible faster signing .]
168
+ AC_ARG_WITH ( [ ecmult-gen-blocks ] , [ AS_HELP_STRING ( [ --with-ecmult-gen-blocks=BLOCKS |auto] ,
169
+ [ The number of blocks to use in the multi-comb multiplication algorithm, in the range [ 1..256 ] .]
170
+ [ Larger values result in possibly better performance at the cost of a linearly larger precomputed table .]
171
+ [ There must exist a multiple of BLOCKS*TEETH that is between 256 and 288, inclusive .]
172
172
[ "auto" is a reasonable setting for desktop machines (currently 4). [ default=auto] ]
173
173
) ] ,
174
- [ req_ecmult_gen_precision=$withval] , [ req_ecmult_gen_precision=auto] )
174
+ [ req_ecmult_gen_blocks=$withval] , [ req_ecmult_gen_blocks=auto] )
175
+
176
+ AC_ARG_WITH ( [ ecmult-gen-teeth] , [ AS_HELP_STRING ( [ --with-ecmult-gen-blocks=TEETH|auto] ,
177
+ [ The number of teeth to use in the multi-comb multiplication algorithm, in the range [ 1..8] .]
178
+ [ Larger values result in possibly better performance at the cost of an exponentially larger precomputed table.]
179
+ [ There must exist a multiple of BLOCKS*TEETH that is between 256 and 288, inclusive.]
180
+ [ "auto" is a reasonable setting for desktop machines (currently 5). [ default=auto] ]
181
+ ) ] ,
182
+ [ req_ecmult_gen_teeth=$withval] , [ req_ecmult_gen_teeth=auto] )
175
183
176
184
AC_CHECK_TYPES ( [ __int128] )
177
185
@@ -431,19 +439,45 @@ case $set_ecmult_window in
431
439
;;
432
440
esac
433
441
434
- # set ecmult gen precision
435
- if test x"$req_ecmult_gen_precision " = x"auto"; then
436
- set_ecmult_gen_precision =4
442
+ # set ecmult gen blocks
443
+ if test x"$req_ecmult_gen_blocks " = x"auto"; then
444
+ set_ecmult_gen_blocks =4
437
445
else
438
- set_ecmult_gen_precision=$req_ecmult_gen_precision
446
+ set_ecmult_gen_blocks=$req_ecmult_gen_blocks
439
447
fi
448
+ error_gen_blocks=[ 'option to --with-ecmult-gen-blocks not an integer in range [ 1..256] or "auto"']
449
+ case $set_ecmult_gen_blocks in
450
+ ''|*[ [ !0-9] ] *)
451
+ # no valid integer
452
+ AC_MSG_ERROR ( $error_gen_blocks )
453
+ ;;
454
+ *)
455
+ if test "$set_ecmult_gen_blocks" -lt 1 -o "$set_ecmult_gen_blocks" -gt 256 ; then
456
+ # not in range
457
+ AC_MSG_ERROR ( $error_gen_blocks )
458
+ fi
459
+ AC_DEFINE_UNQUOTED ( COMB_BLOCKS , $set_ecmult_gen_blocks , [ Set number of blocks in ecmult_gen precomputation] )
460
+ ;;
461
+ esac
440
462
441
- case $set_ecmult_gen_precision in
442
- 2|4|8)
443
- AC_DEFINE_UNQUOTED ( ECMULT_GEN_PREC_BITS , $set_ecmult_gen_precision , [ Set ecmult gen precision bits] )
463
+ # set ecmult gen teeth
464
+ if test x"$req_ecmult_gen_teeth" = x"auto"; then
465
+ set_ecmult_gen_teeth=5
466
+ else
467
+ set_ecmult_gen_teeth=$req_ecmult_gen_teeth
468
+ fi
469
+ error_gen_teeth=[ 'option to --with-ecmult-gen-teeth not an integer in range [ 1..8] or "auto"']
470
+ case $set_ecmult_gen_teeth in
471
+ ''|*[ [ !0-9] ] *)
472
+ # no valid integer
473
+ AC_MSG_ERROR ( $error_gen_teeth )
444
474
;;
445
475
*)
446
- AC_MSG_ERROR ( [ 'ecmult gen precision not 2, 4, 8 or "auto"'] )
476
+ if test "$set_ecmult_gen_teeth" -lt 1 -o "$set_ecmult_gen_teeth" -gt 8 ; then
477
+ # not in range
478
+ AC_MSG_ERROR ( $error_gen_teeth )
479
+ fi
480
+ AC_DEFINE_UNQUOTED ( COMB_TEETH , $set_ecmult_gen_teeth , [ Set number of teeth in ecmult_gen precomputation] )
447
481
;;
448
482
esac
449
483
@@ -582,7 +616,8 @@ echo " bignum = $set_bignum"
582
616
echo " field = $set_field"
583
617
echo " scalar = $set_scalar"
584
618
echo " ecmult window size = $set_ecmult_window"
585
- echo " ecmult gen prec. bits = $set_ecmult_gen_precision"
619
+ echo " ecmult gen blocks = $set_ecmult_gen_blocks"
620
+ echo " ecmult gen teeth = $set_ecmult_gen_teeth"
586
621
echo
587
622
echo " CC = $CC"
588
623
echo " CFLAGS = $CFLAGS"
0 commit comments