On Thu, Aug 3, 2023 at 12:38 PM Mariam Harutyunyan via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> This patch adds CRC support for the RISC-V architecture. It adds internal
> functions and built-ins specifically designed to handle CRC computations
> efficiently.
>
> If the target is ZBC, the clmul instruction is used for the CRC code
> generation; otherwise, table-based CRC is generated.  A table with 256
> elements is used to store precomputed CRCs.
>
> These CRC calculation algorithms have higher performance than the naive CRC
> calculation algorithm.

A few things about this patch:
You created a generic (non-target specific) builtin but didn't
document it in doc/extend.texi .
You created a generic builtin with no fallback in libgcc.
You created a new named (RTL) pattern, crc, and didn't document it in
the `Standard Names` section of doc/md.texi .

Thanks,
Andrew Pinski

>
>       gcc/ChangeLog:
>            *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_UINT32_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.
>            * 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.
>            * config/riscv/bitmanip.md (crc<ANYI2:mode><ANYI:mode>4): New
> expander.
>            * config/riscv/riscv-protos.h (expand_crc_table_based): Declare.
>            (expand_crc_using_clmul): Likewise.
>            * config/riscv/riscv.cc (gf2n_poly_long_div_quotient): New
> function.
>            (generate_crc): Likewise.
>            (generate_crc_table): Likewise.
>            (expand_crc_table_based): Likewise.
>            (expand_crc_using_clmul): Likewise.
>            * config/riscv/riscv.md (UNSPEC_CRC): New unspec for CRC.
>            * internal-fn.cc (crc_direct): Define.
>            (expand_crc_optab_fn): New function.
>            (direct_crc_optab_supported_p): Define.
>            * internal-fn.def (CRC): New internal optab function.
>            * optabs.def (crc_optab): New optab.
>
>      gcc/testsuite/ChangeLog:
>            * gcc.target/riscv/crc-builtin-table-target32.c: New test.
>            * gcc.target/riscv/crc-builtin-table-target64.c: New test.
>            * gcc.target/riscv/crc-builtin-zbc32.c: New test.
>            * gcc.target/riscv/crc-builtin-zbc64.c: New test.

Reply via email to