It looks like the GCC compiler is broken for RDSEED on Cygwin and MinGW (RDRAND gear is fine). Here's a test under Cygwin-X86. Cygwin-X64 produced a similar error
g++ -DNDEBUG -g2 -O3 -maes -msse4 -msse3 -msse2 -mrdrnd -mrdseed -Wall -march=native -c rdrand.cpp
rdrand.cpp: In function ‘int CryptoPP::GCC_RSI_GenerateBlock(byte*, size_t, unsigned int)’:
rdrand.cpp:616:51: error: ‘__builtin_ia32_rdseed32_step’ was not declared in this scope
if (__builtin_ia32_rdseed32_step((word32*)output))
^
rdrand.cpp:634:40: error: ‘__builtin_ia32_rdseed32_step’ was not declared in this scope
if (__builtin_ia32_rdseed32_step(&val))
^
GNUmakefile:414: recipe for target 'rdrand.o' failed
make: *** [rdrand.o] Error 1
As far as I know, __builtin_ia32_rdseed{16|32|64}_step are the only functions semi-documented by GCC. Confer,
https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html. Everything else is undocumented (counter examples are welcomed).
JPM wanted RDSEED, and I think we should provide it. We have to decide what to do here.
I think the options are:
(1) Remove RDSEED completely until GCC provides full support
(2) Disable RDSEED for the Unix on Windows gear until GCC provides full support
(3) Provide an ASM implementation that always "just works"
What is the course of action we should take?
Jeff