public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [RFC/RFA] [PATCH 02/12] Add built-ins and tests for bit-forward and bit-reversed CRCs
@ 2024-05-24  8:41 Mariam Arutunian
  2024-05-25 18:16 ` Jeff Law
  2024-05-27  6:38 ` Richard Biener
  0 siblings, 2 replies; 6+ messages in thread
From: Mariam Arutunian @ 2024-05-24  8:41 UTC (permalink / raw)
  To: GCC Patches


[-- Attachment #1.1: Type: text/plain, Size: 4649 bytes --]

This patch introduces new built-in functions to GCC for computing
bit-forward and bit-reversed CRCs.
These builtins aim to provide efficient CRC calculation capabilities.
When the target architecture supports CRC operations (as indicated by the
presence of a CRC optab),
the builtins will utilize the expander to generate CRC code.
In the absence of hardware support, the builtins default to generating code
for a table-based CRC calculation.

The builtins are defined as follows:
__builtin_rev_crc16_data8,
__builtin_rev_crc32_data8, __builtin_rev_crc32_data16,
__builtin_rev_crc32_data32
__builtin_crc8_data8,
__builtin_crc16_data16, __builtin_crc16_data8,
__builtin_crc32_data8, __builtin_crc32_data16, __builtin_crc32_data32,
__builtin_crc64_data8, __builtin_crc64_data16,  __builtin_crc64_data32,
__builtin_crc64_data64

Each builtin takes three parameters:
crc: The initial CRC value.
data: The data to be processed.
polynomial: The CRC polynomial without the leading 1.

To validate the correctness of these builtins, this patch also includes
additions to the GCC testsuite.
This enhancement allows GCC to offer developers high-performance CRC
computation options
that automatically adapt to the capabilities of the target hardware.

Co-authored-by: Joern Rennecke <joern.rennecke@embecosm.com>

Not complete. May continue the work if these built-ins are needed.

gcc/

 * builtin-types.def (BT_FN_UINT8_UINT8_UINT8_CONST_SIZE): Define.
 (BT_FN_UINT16_UINT16_UINT8_CONST_SIZE): Likewise.
          (BT_FN_UINT16_UINT16_UINT16_CONST_SIZE): Likewise.
          (BT_FN_UINT32_UINT32_UINT8_CONST_SIZE): Likewise.
          (BT_FN_UINT32_UINT32_UINT16_CONST_SIZE): Likewise.
          (BT_FN_UINT32_UINT32_UINT32_CONST_SIZE): Likewise.
          (BT_FN_UINT64_UINT64_UINT8_CONST_SIZE): Likewise.
          (BT_FN_UINT64_UINT64_UINT16_CONST_SIZE): Likewise.
          (BT_FN_UINT64_UINT64_UINT32_CONST_SIZE): Likewise.
          (BT_FN_UINT64_UINT64_UINT64_CONST_SIZE): Likewise.
          * builtins.cc (associated_internal_fn): Handle
BUILT_IN_CRC8_DATA8,
          BUILT_IN_CRC16_DATA8, BUILT_IN_CRC16_DATA16,
          BUILT_IN_CRC32_DATA8, BUILT_IN_CRC32_DATA16,
BUILT_IN_CRC32_DATA32,
          BUILT_IN_CRC64_DATA8, BUILT_IN_CRC64_DATA16,
BUILT_IN_CRC64_DATA32,
          BUILT_IN_CRC64_DATA64,
          BUILT_IN_REV_CRC8_DATA8,
          BUILT_IN_REV_CRC16_DATA8, BUILT_IN_REV_CRC16_DATA16,
          BUILT_IN_REV_CRC32_DATA8, BUILT_IN_REV_CRC32_DATA16,
BUILT_IN_REV_CRC32_DATA32.
          (expand_builtin_crc_table_based): New function.
          (expand_builtin): Handle BUILT_IN_CRC8_DATA8,
          BUILT_IN_CRC16_DATA8, BUILT_IN_CRC16_DATA16,
          BUILT_IN_CRC32_DATA8, BUILT_IN_CRC32_DATA16,
BUILT_IN_CRC32_DATA32,
          BUILT_IN_CRC64_DATA8, BUILT_IN_CRC64_DATA16,
BUILT_IN_CRC64_DATA32,
          BUILT_IN_CRC64_DATA64,
          BUILT_IN_REV_CRC8_DATA8,
          BUILT_IN_REV_CRC16_DATA8, BUILT_IN_REV_CRC16_DATA16,
          BUILT_IN_REV_CRC32_DATA8, BUILT_IN_REV_CRC32_DATA16,
BUILT_IN_REV_CRC32_DATA32.
          * builtins.def (BUILT_IN_CRC8_DATA8): New builtin.
          (BUILT_IN_CRC16_DATA8): Likewise.
          (BUILT_IN_CRC16_DATA16): Likewise.
          (BUILT_IN_CRC32_DATA8): Likewise.
          (BUILT_IN_CRC32_DATA16): Likewise.
          (BUILT_IN_CRC32_DATA32): Likewise.
          (BUILT_IN_CRC64_DATA8): Likewise.
          (BUILT_IN_CRC64_DATA16): Likewise.
          (BUILT_IN_CRC64_DATA32): Likewise.
          (BUILT_IN_CRC64_DATA64): Likewise.
          (BUILT_IN_REV_CRC8_DATA8): New builtin.
          (BUILT_IN_REV_CRC16_DATA8): Likewise.
          (BUILT_IN_REV_CRC16_DATA16): Likewise.
          (BUILT_IN_REV_CRC32_DATA8): Likewise.
          (BUILT_IN_REV_CRC32_DATA16): Likewise.
          (BUILT_IN_REV_CRC32_DATA32): Likewise.
          * builtins.h (expand_builtin_crc_table_based): New function
declaration.
          * doc/extend.texti (__builtin_rev_crc16_data8,
          (__builtin_rev_crc32_data32, __builtin_rev_crc32_data8,
          __builtin_rev_crc32_data16, __builtin_crc8_data8,
          __builtin_crc16_data16, __builtin_crc16_data8,
          __builtin_crc32_data32, __builtin_crc32_data8,
          __builtin_crc32_data16, __builtin_crc64_data64,
          __builtin_crc64_data8, __builtin_crc64_data16,
          __builtin_crc64_data32): Document.

      gcc/testsuite/

         * gcc.c-torture/compile/crc-builtin-rev-target32.c
         * gcc.c-torture/compile/crc-builtin-rev-target64.c
         * gcc.c-torture/compile/crc-builtin-target32.c
         * gcc.c-torture/compile/crc-builtin-target64.c

Signed-off-by: Mariam Arutunian <mariamarutunian@gmail.com>

[-- Attachment #2: 0002-Add-built-ins-and-tests-for-bit-forward-and-bit-reve.patch --]
[-- Type: application/x-patch, Size: 19880 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-06-01  4:53 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-24  8:41 [RFC/RFA] [PATCH 02/12] Add built-ins and tests for bit-forward and bit-reversed CRCs Mariam Arutunian
2024-05-25 18:16 ` Jeff Law
2024-05-27  6:38 ` Richard Biener
2024-05-27 15:16   ` Jeff Law
2024-05-28  6:44     ` Richard Biener
2024-06-01  4:53       ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).