Undocumented requirements for the architecture and the compiler
The requirements for the architecture and the compiler are not documented, at least in the README file.
Due to the use of x86intrin.h
and (non-standard) 128-bit types, the code is compatible only with x86_64 processors, and a GCC-compatible compiler is probably needed for this reason too.
The code also uses this GCC behavior (other compilers could optimize under some contexts and break the code):
As an extension to the C language, GCC does not use the latitude
given in C99 and C11 only to treat certain aspects of signed ‘<<’
as undefined. However, ‘-fsanitize=shift’ (and
‘-fsanitize=undefined’) will diagnose such cases. They are also
diagnosed where constant expressions are required.
(quoted from the GCC 13.2.0 manual): indeed, with -fsanitize=undefined
, one gets runtime errors concerning such shifts.