On Sun, 2023-09-24 at 00:05 +0100, Joern Rennecke wrote: > > Although maybe Oleg Endo's library, as mentioned in > https://gcc.gnu.org/pipermail/gcc-patches/2022-March/591748.html , > might be suitable? What is the license for that? > >
I haven't published the library, but I think I could do that. It's a C++-14 header-only thing and uses templates + constexpr to generate the .rodata lookup tables. It's convenient for an application project, as it doesn't require any generator tool in the build. This might be not a big advantage in the context of GCC. Since the tables are computed during compile-time, there is no particular optimization implemented. The run-time function is also nothing fancy: static constexpr uint8_t table_index (value_type rem, uint8_t x) { if (ReflectInput) return x ^ rem; else return x ^ (BitCount > 8 ? (rem >> (BitCount - 8)) : (rem << (8 - BitCount))); } static constexpr value_type shift (value_type rem) { return ReflectInput ? rem >> 8 : rem << 8; } static value_type default_process_bytes (value_type rem, const uint8_t* in, const uint8_t* in_end) { for (; in != in_end; ++in) { auto i = table_index (rem, *in); rem = table[i] ^ shift (rem); } return rem; } Anyway, let me know if anyone is interested. Cheers, Oleg