Skip to content

Commit 73cf4df

Browse files
committed
Merge remote-tracking branch 'ethsnarks/no-exceptional-control-flow' into exceptions-fix
* ethsnarks/no-exceptional-control-flow: Removed unnecessary comments Don't use empty inline-assembly, removes need to patch libfqfft for emscripten build Fixed tests to get evaluation domain Do not use try/catch for control flow in get_evaluation_domain
2 parents 2139889 + f5f8c5a commit 73cf4df

13 files changed

+155
-11
lines changed

libfqfft/evaluation_domain/domains/arithmetic_sequence_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ namespace libfqfft {
2828
FieldT arithmetic_generator;
2929
void do_precomputation();
3030

31+
static bool valid_for_size(const size_t m);
32+
3133
arithmetic_sequence_domain(const size_t m);
3234

3335
void FFT(std::vector<FieldT> &a);

libfqfft/evaluation_domain/domains/arithmetic_sequence_domain.tcc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@
2323

2424
namespace libfqfft {
2525

26+
template<typename FieldT>
27+
bool arithmetic_sequence_domain<FieldT>::valid_for_size(const size_t m)
28+
{
29+
if (m <=1)
30+
return false;
31+
32+
if (FieldT::arithmetic_generator() == FieldT::zero())
33+
return false;
34+
35+
return true;
36+
}
37+
2638
template<typename FieldT>
2739
arithmetic_sequence_domain<FieldT>::arithmetic_sequence_domain(const size_t m) : evaluation_domain<FieldT>(m)
2840
{

libfqfft/evaluation_domain/domains/basic_radix2_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class basic_radix2_domain : public evaluation_domain<FieldT> {
2626

2727
FieldT omega;
2828

29+
static bool valid_for_size(const size_t m);
30+
2931
basic_radix2_domain(const size_t m);
3032

3133
void FFT(std::vector<FieldT> &a);

libfqfft/evaluation_domain/domains/basic_radix2_domain.tcc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,27 @@
2222

2323
namespace libfqfft {
2424

25+
template<typename FieldT>
26+
bool basic_radix2_domain<FieldT>::valid_for_size(const size_t m)
27+
{
28+
if ( m <= 1 )
29+
return false;
30+
31+
// Will `get_root_of_unity` throw?
32+
if (!std::is_same<FieldT, libff::Double>::value)
33+
{
34+
const size_t logm = libff::log2(m);
35+
36+
if (logm > FieldT::s)
37+
return false;
38+
}
39+
40+
if( get_root_of_unity_will_throw<FieldT>(m) )
41+
return false;
42+
43+
return true;
44+
}
45+
2546
template<typename FieldT>
2647
basic_radix2_domain<FieldT>::basic_radix2_domain(const size_t m) : evaluation_domain<FieldT>(m)
2748
{

libfqfft/evaluation_domain/domains/basic_radix2_domain_aux.tcc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void _basic_serial_radix2_FFT(std::vector<GroupT> &a, const FieldT &omega)
6161
// w_m is 2^s-th root of unity now
6262
const FieldT w_m = omega^(n/(2*m));
6363

64-
asm volatile ("/* pre-inner */");
64+
//asm volatile ("/* pre-inner */");
6565
for (size_t k = 0; k < n; k += 2*m)
6666
{
6767
FieldT w = FieldT::one();
@@ -73,7 +73,7 @@ void _basic_serial_radix2_FFT(std::vector<GroupT> &a, const FieldT &omega)
7373
w *= w_m;
7474
}
7575
}
76-
asm volatile ("/* post-inner */");
76+
//asm volatile ("/* post-inner */");
7777
m *= 2;
7878
}
7979
}

libfqfft/evaluation_domain/domains/extended_radix2_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class extended_radix2_domain : public evaluation_domain<FieldT> {
2727
FieldT omega;
2828
FieldT shift;
2929

30+
static bool valid_for_size(const size_t m);
31+
3032
extended_radix2_domain(const size_t m);
3133

3234
void FFT(std::vector<FieldT> &a);

libfqfft/evaluation_domain/domains/extended_radix2_domain.tcc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,29 @@
1717

1818
namespace libfqfft {
1919

20+
template<typename FieldT>
21+
bool extended_radix2_domain<FieldT>::valid_for_size(const size_t m)
22+
{
23+
if ( m <= 1 )
24+
return false;
25+
26+
// Will `get_root_of_unity` throw?
27+
if (!std::is_same<FieldT, libff::Double>::value)
28+
{
29+
const size_t logm = libff::log2(m);
30+
31+
if (logm != (FieldT::s + 1))
32+
return false;
33+
}
34+
35+
size_t small_m = m / 2;
36+
37+
if( get_root_of_unity_will_throw<FieldT>(small_m) )
38+
return false;
39+
40+
return true;
41+
}
42+
2043
template<typename FieldT>
2144
extended_radix2_domain<FieldT>::extended_radix2_domain(const size_t m) : evaluation_domain<FieldT>(m)
2245
{

libfqfft/evaluation_domain/domains/geometric_sequence_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ namespace libfqfft {
2727
std::vector<FieldT> geometric_triangular_sequence;
2828
void do_precomputation();
2929

30+
static bool valid_for_size(const size_t m);
31+
3032
geometric_sequence_domain(const size_t m);
3133

3234
void FFT(std::vector<FieldT> &a);

libfqfft/evaluation_domain/domains/geometric_sequence_domain.tcc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@
2323

2424
namespace libfqfft {
2525

26+
template<typename FieldT>
27+
bool geometric_sequence_domain<FieldT>::valid_for_size(const size_t m)
28+
{
29+
if ( m <= 1 )
30+
return false;
31+
32+
if (FieldT::geometric_generator() == FieldT::zero())
33+
return false;
34+
35+
return true;
36+
}
37+
2638
template<typename FieldT>
2739
geometric_sequence_domain<FieldT>::geometric_sequence_domain(const size_t m) : evaluation_domain<FieldT>(m)
2840
{

libfqfft/evaluation_domain/domains/step_radix2_domain.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class step_radix2_domain : public evaluation_domain<FieldT> {
2929
FieldT big_omega;
3030
FieldT small_omega;
3131

32+
static bool valid_for_size(const size_t m);
33+
3234
step_radix2_domain(const size_t m);
3335

3436
void FFT(std::vector<FieldT> &a);

0 commit comments

Comments
 (0)