On Fri, Aug 21, 2026 at 10:51 AM Andrea Pinski < [email protected]> wrote:
> On Thu, Aug 20, 2026 at 10:05 PM Shreesh Adiga > <[email protected]> wrote: > > > > > > > > On Fri, Aug 21, 2026 at 1:37 AM Andrea Pinski < > [email protected]> wrote: > >> > >> On Mon, Aug 17, 2026 at 7:07 AM Shreesh Adiga > >> <[email protected]> wrote: > >> > > >> > This change attempts to compute the various __builtin_crc and rev_crc > >> > functions when all the arguments are compile-time known constants > using > >> > simple CRC loop calculation at compile-time and avoid emitting the > table > >> > based computation. > >> > > >> > Architecture specific CRC builtin folding will be done later as a > follow > >> > up. > >> > > >> > gcc/ChangeLog: > >> > > >> > * fold-const-call.cc (fold_const_crc): new function to fold > crc > >> > (fold_const_call): invoke fold_const_crc to fold builtin crc > >> > > >> > gcc/testsuite/ChangeLog: > >> > > >> > * gcc.dg/crc-builtin-rev-target32.c: modified test to avoid > >> > const fold. > >> > * gcc.dg/crc-builtin-rev-target64.c: modified test to avoid > >> > const fold. > >> > * gcc.dg/crc-builtin-target32.c: modified test to avoid const > >> > fold. > >> > * gcc.dg/crc-builtin-target64.c: modified test to avoid const > >> > fold. > >> > * gcc.target/aarch64/crc-builtin-pmul64.c: modified test to > >> > avoid const fold. > >> > * gcc.target/riscv/crc-builtin-zbc32.c: modified test to avoid > >> > const fold. > >> > * gcc.target/riscv/crc-builtin-zbc64.c: modified test to avoid > >> > const fold. > >> > * gcc.target/riscv/rvv/base/crc-builtin-zvbc.c: modified test > to > >> > avoid const fold. > >> > * gcc.dg/crc-builtin-const-fold-target32.c: New test. > >> > * gcc.dg/crc-builtin-const-fold-target64.c: New test. > >> > > >> > Signed-off-by: Shreesh Adiga <[email protected]> > >> > --- > >> > gcc/fold-const-call.cc | 75 ++++++++++ > >> > .../gcc.dg/crc-builtin-const-fold-target32.c | 80 +++++++++++ > >> > .../gcc.dg/crc-builtin-const-fold-target64.c | 134 > ++++++++++++++++++ > >> > .../gcc.dg/crc-builtin-rev-target32.c | 25 ++-- > >> > .../gcc.dg/crc-builtin-rev-target64.c | 45 +++--- > >> > gcc/testsuite/gcc.dg/crc-builtin-target32.c | 25 ++-- > >> > gcc/testsuite/gcc.dg/crc-builtin-target64.c | 43 +++--- > >> > .../gcc.target/aarch64/crc-builtin-pmul64.c | 52 +++---- > >> > .../gcc.target/riscv/crc-builtin-zbc32.c | 13 +- > >> > .../gcc.target/riscv/crc-builtin-zbc64.c | 49 +++---- > >> > .../riscv/rvv/base/crc-builtin-zvbc.c | 49 +++---- > >> > 11 files changed, 441 insertions(+), 149 deletions(-) > >> > create mode 100644 > gcc/testsuite/gcc.dg/crc-builtin-const-fold-target32.c > >> > create mode 100644 > gcc/testsuite/gcc.dg/crc-builtin-const-fold-target64.c > >> > > >> > diff --git a/gcc/fold-const-call.cc b/gcc/fold-const-call.cc > >> > index b3a9d7715d6..aadfc837469 100644 > >> > --- a/gcc/fold-const-call.cc > >> > +++ b/gcc/fold-const-call.cc > >> > @@ -2044,6 +2044,58 @@ fold_const_call_1 (combined_fn fn, tree type, > tree arg0, tree arg1, tree arg2) > >> > return NULL_TREE; > >> > } > >> > > >> > +static tree > >> > +fold_const_crc (internal_fn fn, tree type, tree crc_arg, tree > data_arg, > >> > + tree polynomial_arg) > >> > +{ > >> > + if (!integer_cst_p (crc_arg) > >> > + || !integer_cst_p (data_arg) > >> > + || !integer_cst_p (polynomial_arg)) > >> > + return NULL_TREE; > >> > + > >> > + unsigned int crc_bits = TYPE_PRECISION (type); > >> > + unsigned int data_bits = TYPE_PRECISION (TREE_TYPE (data_arg)); > >> > + > >> > + if ((data_bits != 8 && data_bits != 16 && data_bits != 32 && > data_bits != 64) > >> > + || (crc_bits != 8 && crc_bits != 16 && crc_bits != 32 && > crc_bits != 64) > >> > + || data_bits > crc_bits) > >> > + return NULL_TREE; > >> > + > >> > + unsigned HOST_WIDE_INT crc = wi::to_wide (crc_arg).to_uhwi (); > >> > + unsigned HOST_WIDE_INT data = wi::to_wide (data_arg).to_uhwi (); > >> > + unsigned HOST_WIDE_INT polynomial = wi::to_wide > (polynomial_arg).to_uhwi (); > >> > >> You should use tree_to_uhwi instead for all of these. > >> > >> > + > >> > + if (fn == IFN_CRC_REV) > >> > + { > >> > + unsigned HOST_WIDE_INT rev_polynom = reflect_hwi (polynomial, > crc_bits); > >> > + crc ^= data; > >> > + for (unsigned int n = 0; n < data_bits; n++) > >> > + { > >> > + if (crc & 1) > >> > + crc = (crc >> 1) ^ rev_polynom; > >> > + else > >> > + crc >>= 1; > >> > + } > >> > + } > >> > + else > >> > + { > >> > + unsigned HOST_WIDE_INT msb = HOST_WIDE_INT_1U << (crc_bits - > 1); > >> > + crc ^= (data << (crc_bits - data_bits)); > >> > + for (unsigned int n = 0; n < data_bits; n++) > >> > + { > >> > + if (crc & msb) > >> > + crc = (crc << 1) ^ polynomial; > >> > + else > >> > + crc <<= 1; > >> > + } > >> > + } > >> > >> I was trying to think if there was a way to combine these two loops > >> but I can't think of a way since one does >> and the other does <<. > >> > >> > >> > + > >> > + /* Zero out bits in crc beyond the specified number of crc_bits. > */ > >> > + if (crc_bits < sizeof (crc) * CHAR_BIT) > >> You can just use HOST_BITS_PER_WIDE_INT. > >> > > > > I copied this code and the loop from the functions calculate_crc and > > calculate_reversed_crc in gcc/expr.cc since they were not generic > > and were using 0 as initial crc and computing only for 8 bit data. > > I was wondering if we could refactor those functions to be more generic. > > Kindly let me know if we can safely update these public functions without > > any backwards compatibility API issues in a subsequent patch. > > You can safely update those APIs without any backwards compatibility > issues in GCC. > Mostly any internal APIs in GCC can change without worrying about > backwards compatibility. > Currently GCC does not define a stable plugin interface so don't worry > about changing the functions that are internal to GCC. > Plus calculate_reversed_crc and calculate_crc are static in the > expr.cc file so exporting them and/or moving them elsewhere is fine > without any worry about backwards compatibility. > > Thanks for the guidance around APIs in GCC. Any suggestions on whether it is okay to keep the crc functions inside expr.cc and have the fold-const-call.cc include expr.h (and rtl.h), or is it better to move them to some other file? Should I just have a header file instead and have these crc functions be static inline? Thanks, Shreesh > Thanks, > Andrea > > > For now I will send out a v2 with your suggestions so far. > > > >> > >> > + crc &= (HOST_WIDE_INT_1U << crc_bits) - 1; > >> > + return wide_int_to_tree (type, wi::uhwi (crc, crc_bits)); > >> > >> You can use build_int_cstu instead. > >> > >> > +} > >> > + > >> > /* Try to fold FN (ARG0, ARG1, ARG2) to a constant. Return the > constant on > >> > success, otherwise return null. TYPE is the type of the return > value. */ > >> > > >> > @@ -2145,6 +2197,29 @@ fold_const_call (combined_fn fn, tree type, > tree arg0, tree arg1, tree arg2) > >> > } > >> > return NULL_TREE; > >> > > >> > + case CFN_BUILT_IN_CRC8_DATA8: > >> > + case CFN_BUILT_IN_CRC16_DATA8: > >> > + case CFN_BUILT_IN_CRC16_DATA16: > >> > + case CFN_BUILT_IN_CRC32_DATA8: > >> > + case CFN_BUILT_IN_CRC32_DATA16: > >> > + case CFN_BUILT_IN_CRC32_DATA32: > >> > + case CFN_BUILT_IN_CRC64_DATA8: > >> > + case CFN_BUILT_IN_CRC64_DATA16: > >> > + case CFN_BUILT_IN_CRC64_DATA32: > >> > + case CFN_BUILT_IN_CRC64_DATA64: > >> > + case CFN_BUILT_IN_REV_CRC8_DATA8: > >> > + case CFN_BUILT_IN_REV_CRC16_DATA8: > >> > + case CFN_BUILT_IN_REV_CRC16_DATA16: > >> > + case CFN_BUILT_IN_REV_CRC32_DATA8: > >> > + case CFN_BUILT_IN_REV_CRC32_DATA16: > >> > + case CFN_BUILT_IN_REV_CRC32_DATA32: > >> > + case CFN_BUILT_IN_REV_CRC64_DATA8: > >> > + case CFN_BUILT_IN_REV_CRC64_DATA16: > >> > + case CFN_BUILT_IN_REV_CRC64_DATA32: > >> > + case CFN_BUILT_IN_REV_CRC64_DATA64: > >> > + return fold_const_crc (associated_internal_fn (fn, type), > >> > + type, arg0, arg1, arg2); > >> > + > >> > default: > >> > return fold_const_call_1 (fn, type, arg0, arg1, arg2); > >> > } > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target32.c > b/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target32.c > >> > new file mode 100644 > >> > index 00000000000..f8c84c3abcb > >> > --- /dev/null > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target32.c > >> > @@ -0,0 +1,80 @@ > >> > +/* { dg-do compile } */ > >> > +/* { dg-require-effective-target int32plus } */ > >> > +/* { dg-additional-options "-fdump-tree-optimized" } */ > >> > + > >> > +#include <stdint.h> > >> > + > >> > +int8_t crc8_data8 () > >> > +{ > >> > + return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > +} > >> > + > >> > +int16_t crc16_data8 () > >> > +{ > >> > + return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > +} > >> > + > >> > +int16_t crc16_data16 () > >> > +{ > >> > + return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > +} > >> > + > >> > +int32_t crc32_data8 () > >> > +{ > >> > + return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > +} > >> > + > >> > +int32_t crc32_data16 () > >> > +{ > >> > + return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > +} > >> > + > >> > +int32_t crc32_data32 () > >> > +{ > >> > + return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > +} > >> > + > >> > +int8_t rev_crc8_data8 () > >> > +{ > >> > + return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > +} > >> > + > >> > +int16_t rev_crc16_data8 () > >> > +{ > >> > + return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > +} > >> > + > >> > +int16_t rev_crc16_data16 () > >> > +{ > >> > + return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > +} > >> > + > >> > +int32_t rev_crc32_data8 () > >> > +{ > >> > + return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > +} > >> > + > >> > +int32_t rev_crc32_data16 () > >> > +{ > >> > + return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > +} > >> > + > >> > +int32_t rev_crc32_data32 () > >> > +{ > >> > + return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > +} > >> > + > >> > + > >> > +/* Test that builtin calls are optimized away and not present */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc8_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc16_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc16_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data32" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc8_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc16_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc16_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data32" > "optimized" } } */ > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target64.c > b/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target64.c > >> > new file mode 100644 > >> > index 00000000000..7ba40fe3f6b > >> > --- /dev/null > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-const-fold-target64.c > >> > @@ -0,0 +1,134 @@ > >> > +/* { dg-do compile { target lp64 } } */ > >> > +/* { dg-require-effective-target int32plus } */ > >> > +/* { dg-additional-options "-fdump-tree-optimized" } */ > >> > + > >> > +#include <stdint.h> > >> > + > >> > +int8_t crc8_data8 () > >> > +{ > >> > + return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > +} > >> > + > >> > +int16_t crc16_data8 () > >> > +{ > >> > + return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > +} > >> > + > >> > +int16_t crc16_data16 () > >> > +{ > >> > + return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > +} > >> > + > >> > +int32_t crc32_data8 () > >> > +{ > >> > + return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > +} > >> > + > >> > +int32_t crc32_data16 () > >> > +{ > >> > + return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > +} > >> > + > >> > +int32_t crc32_data32 () > >> > +{ > >> > + return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > +} > >> > + > >> > +int64_t crc64_data8 () > >> > +{ > >> > + return __builtin_crc64_data8 (0xffffffffffffffff, 0x32, > 0x40021234002123); > >> > +} > >> > + > >> > +int64_t crc64_data16 () > >> > +{ > >> > + return __builtin_crc64_data16 (0xffffffffffffffff, 0x3232, > 0x40021234002123); > >> > +} > >> > + > >> > +int64_t crc64_data32 () > >> > +{ > >> > + return __builtin_crc64_data32 (0xffffffffffffffff, 0x123546ff, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > +int64_t crc64_data64 () > >> > +{ > >> > + return __builtin_crc64_data64 (0xffffffffffffffff, > 0x123546ff123546ff, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > +int8_t rev_crc8_data8 () > >> > +{ > >> > + return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > +} > >> > + > >> > +int16_t rev_crc16_data8 () > >> > +{ > >> > + return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > +} > >> > + > >> > +int16_t rev_crc16_data16 () > >> > +{ > >> > + return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > +} > >> > + > >> > +int32_t rev_crc32_data8 () > >> > +{ > >> > + return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > +} > >> > + > >> > +int32_t rev_crc32_data16 () > >> > +{ > >> > + return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > +} > >> > + > >> > +int32_t rev_crc32_data32 () > >> > +{ > >> > + return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > +} > >> > + > >> > +int64_t rev_crc64_data8 () > >> > +{ > >> > + return __builtin_rev_crc64_data8 (0xffffffffffffffff, 0x32, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > +int64_t rev_crc64_data16 () > >> > +{ > >> > + return __builtin_rev_crc64_data16 (0xffffffffffffffff, 0x3232, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > +int64_t rev_crc64_data32 () > >> > +{ > >> > + return __builtin_rev_crc64_data32 (0xffffffffffffffff, 0x123546ff, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > +int64_t rev_crc64_data64 () > >> > +{ > >> > + return __builtin_rev_crc64_data64 (0xffffffffffffffff, > 0x123546ff123546ff, > >> > + 0x40021234002123); > >> > +} > >> > + > >> > + > >> > +/* Test that builtin calls are optimized away and not present */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc8_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc16_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc16_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc32_data32" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc64_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc64_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc64_data32" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_crc64_data64" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc8_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc16_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc16_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc32_data32" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc64_data8" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc64_data16" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc64_data32" > "optimized" } } */ > >> > +/* { dg-final { scan-tree-dump-not "__builtin_rev_crc64_data64" > "optimized" } } */ > >> > >> It would be a good idea to have a runtime testcase for these to make > >> sure the folding (and/or target implementation) is correct. > >> > >> Otherwise this looks good. > >> > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-rev-target32.c > b/gcc/testsuite/gcc.dg/crc-builtin-rev-target32.c > >> > index 25dc9a226c3..e729e9efb4b 100644 > >> > --- a/gcc/testsuite/gcc.dg/crc-builtin-rev-target32.c > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-rev-target32.c > >> > @@ -4,34 +4,35 @@ > >> > > >> > #include <stdint.h> > >> > > >> > -int8_t rev_crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm crc table > emitting */ > >> > +int8_t rev_crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_rev_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t rev_crc16_data8 () > >> > +int16_t rev_crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_rev_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t rev_crc16_data16 () > >> > +int16_t rev_crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_rev_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t rev_crc32_data8 () > >> > +int32_t rev_crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_rev_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data16 () > >> > +int32_t rev_crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_rev_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data32 () > >> > +int32_t rev_crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > + return __builtin_rev_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > /* { dg-final { scan-rtl-dump ";; (?:using optab for|emitting > reversed crc table) crc_8_polynomial_0x12" "expand" } } */ > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-rev-target64.c > b/gcc/testsuite/gcc.dg/crc-builtin-rev-target64.c > >> > index bc9dfa5b619..b6ef9696314 100644 > >> > --- a/gcc/testsuite/gcc.dg/crc-builtin-rev-target64.c > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-rev-target64.c > >> > @@ -4,58 +4,55 @@ > >> > > >> > #include <stdint.h> > >> > > >> > -int8_t rev_crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm crc table > emitting */ > >> > +int8_t rev_crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_rev_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t rev_crc16_data8 () > >> > +int16_t rev_crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_rev_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t rev_crc16_data16 () > >> > +int16_t rev_crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_rev_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t rev_crc32_data8 () > >> > +int32_t rev_crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_rev_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data16 () > >> > +int32_t rev_crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_rev_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data32 () > >> > +int32_t rev_crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > + return __builtin_rev_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > -int64_t rev_crc64_data8 () > >> > +int64_t rev_crc64_data8 (int64_t x) > >> > { > >> > - return __builtin_rev_crc64_data8 (0xffffffffffffffff, 0x32, > >> > - 0x40021234002123); > >> > + return __builtin_rev_crc64_data8 (x, 0x32, 0x40021234002123); > >> > } > >> > > >> > -int64_t rev_crc64_data16 () > >> > +int64_t rev_crc64_data16 (int64_t x) > >> > { > >> > - return __builtin_rev_crc64_data16 (0xffffffffffffffff, 0x3232, > >> > - 0x40021234002123); > >> > + return __builtin_rev_crc64_data16 (x, 0x3232, 0x40021234002123); > >> > } > >> > > >> > -int64_t rev_crc64_data32 () > >> > +int64_t rev_crc64_data32 (int64_t x) > >> > { > >> > - return __builtin_rev_crc64_data32 (0xffffffffffffffff, 0x123546ff, > >> > - 0x40021234002123); > >> > + return __builtin_rev_crc64_data32 (x, 0x123546ff, > 0x40021234002123); > >> > } > >> > > >> > -int64_t rev_crc64_data64 () > >> > +int64_t rev_crc64_data64 (int64_t x) > >> > { > >> > - return __builtin_rev_crc64_data64 (0xffffffffffffffff, > 0x123546ff123546ff, > >> > - 0x40021234002123); > >> > + return __builtin_rev_crc64_data64 (x, 0x123546ff123546ff, > 0x40021234002123); > >> > } > >> > > >> > /* { dg-final { scan-rtl-dump ";; (?:using optab for|emitting > reversed crc table) crc_8_polynomial_0x12" "expand" } } */ > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-target32.c > b/gcc/testsuite/gcc.dg/crc-builtin-target32.c > >> > index 43db8c96e16..492f3209bbb 100644 > >> > --- a/gcc/testsuite/gcc.dg/crc-builtin-target32.c > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-target32.c > >> > @@ -4,34 +4,35 @@ > >> > > >> > #include <stdint.h> > >> > > >> > -int8_t crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm crc table > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t crc32_data8 () > >> > +int32_t crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data16 () > >> > +int32_t crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data32 () > >> > +int32_t crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > + return __builtin_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > /* { dg-final { scan-rtl-dump ";; (?:using optab for|emitting crc > table) crc_8_polynomial_0x12" "expand" } } */ > >> > diff --git a/gcc/testsuite/gcc.dg/crc-builtin-target64.c > b/gcc/testsuite/gcc.dg/crc-builtin-target64.c > >> > index 09aa39fcd86..d5040cfe1e0 100644 > >> > --- a/gcc/testsuite/gcc.dg/crc-builtin-target64.c > >> > +++ b/gcc/testsuite/gcc.dg/crc-builtin-target64.c > >> > @@ -4,56 +4,55 @@ > >> > > >> > #include <stdint.h> > >> > > >> > -int8_t crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm crc table > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t crc32_data8 () > >> > +int32_t crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data16 () > >> > +int32_t crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data32 () > >> > +int32_t crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > + return __builtin_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > -int64_t crc64_data8 () > >> > +int64_t crc64_data8 (int64_t x) > >> > { > >> > - return __builtin_crc64_data8 (0xffffffffffffffff, 0x32, > 0x40021234002123); > >> > + return __builtin_crc64_data8 (x, 0x32, 0x40021234002123); > >> > } > >> > > >> > -int64_t crc64_data16 () > >> > +int64_t crc64_data16 (int64_t x) > >> > { > >> > - return __builtin_crc64_data16 (0xffffffffffffffff, 0x3232, > 0x40021234002123); > >> > + return __builtin_crc64_data16 (x, 0x3232, 0x40021234002123); > >> > } > >> > > >> > -int64_t crc64_data32 () > >> > +int64_t crc64_data32 (int64_t x) > >> > { > >> > - return __builtin_crc64_data32 (0xffffffffffffffff, 0x123546ff, > >> > - 0x40021234002123); > >> > + return __builtin_crc64_data32 (x, 0x123546ff, 0x40021234002123); > >> > } > >> > > >> > -int64_t crc64_data64 () > >> > +int64_t crc64_data64 (int64_t x) > >> > { > >> > - return __builtin_crc64_data64 (0xffffffffffffffff, > 0x123546ff123546ff, > >> > - 0x40021234002123); > >> > + return __builtin_crc64_data64 (x, 0x123546ff123546ff, > 0x40021234002123); > >> > } > >> > > >> > /* { dg-final { scan-rtl-dump ";; (?:using optab for|emitting crc > table) crc_16_polynomial_0x1021" "expand" } } */ > >> > diff --git a/gcc/testsuite/gcc.target/aarch64/crc-builtin-pmul64.c > b/gcc/testsuite/gcc.target/aarch64/crc-builtin-pmul64.c > >> > index cf2fa506981..3363562a5d0 100644 > >> > --- a/gcc/testsuite/gcc.target/aarch64/crc-builtin-pmul64.c > >> > +++ b/gcc/testsuite/gcc.target/aarch64/crc-builtin-pmul64.c > >> > @@ -1,61 +1,63 @@ > >> > /* { dg-options "-march=armv8-a+crypto" } */ > >> > > >> > #include <stdint.h> > >> > -int8_t crc8_data8 () > >> > + > >> > +/* Due to constant folding, use a runtime arg to confirm pmull > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 ('a', 0xff, 0x12); > >> > + return __builtin_crc8_data8 (x, 0xff, 0x12); > >> > } > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t crc32_data8 () > >> > +int32_t crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > -int32_t crc32_data16 () > >> > +int32_t crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data32 () > >> > +int32_t crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > + return __builtin_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > -int8_t rev_crc8_data8 () > >> > +int8_t rev_crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_rev_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t rev_crc16_data8 () > >> > +int16_t rev_crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_rev_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t rev_crc16_data16 () > >> > +int16_t rev_crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_rev_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t rev_crc32_data8 () > >> > +int32_t rev_crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_rev_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data16 () > >> > +int32_t rev_crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_rev_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data32 () > >> > +int32_t rev_crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > -} > >> > + return __builtin_rev_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > +} > >> > /* { dg-final { scan-assembler-times "pmull" 24 } } */ > >> > diff --git a/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc32.c > b/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc32.c > >> > index d4e47608e33..8496555b93d 100644 > >> > --- a/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc32.c > >> > +++ b/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc32.c > >> > @@ -3,19 +3,20 @@ > >> > > >> > #include <stdint-gcc.h> > >> > > >> > -int8_t crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm clmul > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > /* { dg-final { scan-assembler-times "clmul\t" 6 } } */ > >> > diff --git a/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc64.c > b/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc64.c > >> > index 298d47b802f..1f46300b140 100644 > >> > --- a/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc64.c > >> > +++ b/gcc/testsuite/gcc.target/riscv/crc-builtin-zbc64.c > >> > @@ -3,64 +3,65 @@ > >> > > >> > #include <stdint-gcc.h> > >> > > >> > -int8_t crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm clmul > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t crc32_data8 () > >> > +int32_t crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data16 () > >> > +int32_t crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data32 () > >> > +int32_t crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > + return __builtin_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > -int8_t rev_crc8_data8 () > >> > +int8_t rev_crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_rev_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t rev_crc16_data8 () > >> > +int16_t rev_crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_rev_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t rev_crc16_data16 () > >> > +int16_t rev_crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_rev_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t rev_crc32_data8 () > >> > +int32_t rev_crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_rev_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data16 () > >> > +int32_t rev_crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_rev_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data32 () > >> > +int32_t rev_crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > + return __builtin_rev_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > /* { dg-final { scan-assembler-times "clmul\t" 18 } } */ > >> > /* { dg-final { scan-assembler-times "clmulh" 6 } } */ > >> > diff --git > a/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c > b/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c > >> > index 2d5fa88acc9..16c550e2e5a 100644 > >> > --- a/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c > >> > +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/crc-builtin-zvbc.c > >> > @@ -3,64 +3,65 @@ > >> > > >> > #include <stdint-gcc.h> > >> > > >> > -int8_t crc8_data8 () > >> > +/* Due to constant folding, use a runtime arg to confirm clmul > emitting */ > >> > +int8_t crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t crc16_data8 () > >> > +int16_t crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t crc16_data16 () > >> > +int16_t crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t crc32_data8 () > >> > +int32_t crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data16 () > >> > +int32_t crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t crc32_data32 () > >> > +int32_t crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_crc32_data32 (0xffffffff, 0x123546ff, 0x4002123); > >> > + return __builtin_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > > >> > -int8_t rev_crc8_data8 () > >> > +int8_t rev_crc8_data8 (int8_t x) > >> > { > >> > - return __builtin_rev_crc8_data8 (0x34, 'a', 0x12); > >> > + return __builtin_rev_crc8_data8 (x, 'a', 0x12); > >> > } > >> > > >> > -int16_t rev_crc16_data8 () > >> > +int16_t rev_crc16_data8 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data8 (0x1234, 'a', 0x1021); > >> > + return __builtin_rev_crc16_data8 (x, 'a', 0x1021); > >> > } > >> > > >> > -int16_t rev_crc16_data16 () > >> > +int16_t rev_crc16_data16 (int16_t x) > >> > { > >> > - return __builtin_rev_crc16_data16 (0x1234, 0x3214, 0x1021); > >> > + return __builtin_rev_crc16_data16 (x, 0x3214, 0x1021); > >> > } > >> > > >> > -int32_t rev_crc32_data8 () > >> > +int32_t rev_crc32_data8 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data8 (0xffffffff, 0x32, 0x4002123); > >> > + return __builtin_rev_crc32_data8 (x, 0x32, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data16 () > >> > +int32_t rev_crc32_data16 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data16 (0xffffffff, 0x3232, 0x4002123); > >> > + return __builtin_rev_crc32_data16 (x, 0x3232, 0x4002123); > >> > } > >> > > >> > -int32_t rev_crc32_data32 () > >> > +int32_t rev_crc32_data32 (int32_t x) > >> > { > >> > - return __builtin_rev_crc32_data32 (0xffffffff, 0x123546ff, > 0x4002123); > >> > + return __builtin_rev_crc32_data32 (x, 0x123546ff, 0x4002123); > >> > } > >> > /* { dg-final { scan-assembler-times "vclmul.vx" 12 } } */ > >> > /* { dg-final { scan-assembler-times "vclmulh.vx" 12 } } */ > >> > -- > >> > 2.54.0 > >> > > > > > > > Thanks, > > Shreesh >
