Skip to content
Snippets Groups Projects
  • Mariam Arutunian's avatar
    c5126f0a
    [PATCH v6 02/12] Add built-ins and tests for bit-forward and bit-reversed CRCs. · c5126f0a
    Mariam Arutunian authored
    
    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 built-ins are defined as follows:
    __builtin_rev_crc16_data8,
    __builtin_rev_crc32_data8, __builtin_rev_crc32_data16,
    __builtin_rev_crc32_data32
    __builtin_rev_crc64_data8, __builtin_rev_crc64_data16,
     __builtin_rev_crc64_data32, __builtin_rev_crc64_data64,
    __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 built-in 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 built-ins, 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.
    
    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 CRC related builtins.
    	(expand_builtin_crc_table_based): New function.
    	(expand_builtin): Handle CRC related builtins.
    	* 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.
    	(BUILT_IN_REV_CRC64_DATA8): Likewise.
    	(BUILT_IN_REV_CRC64_DATA16): Likewise.
    	(BUILT_IN_REV_CRC64_DATA32): Likewise.
    	(BUILT_IN_REV_CRC64_DATA64): Likewise.
    	* builtins.h (expand_builtin_crc_table_based): New function
    	declaration.
    	* doc/extend.texi: Add documentation for new CRC builtins.
    
    gcc/testsuite/
    
    	* gcc.dg/crc-builtin-rev-target32.c: New test.
    	* gcc.dg/crc-builtin-rev-target64.c: New test.
    	* gcc.dg/crc-builtin-target32.c: New test.
    	* gcc.dg/crc-builtin-target64.c: New test.
    
    Signed-off-by: default avatarMariam Arutunian <mariamarutunian@gmail.com>
    Co-authored-by: default avatarJoern Rennecke <joern.rennecke@embecosm.com>
    Co-authored-by: default avatarJeff Law <jlaw@ventanamicro.com>
    c5126f0a
    History
    [PATCH v6 02/12] Add built-ins and tests for bit-forward and bit-reversed CRCs.
    Mariam Arutunian authored
    
    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 built-ins are defined as follows:
    __builtin_rev_crc16_data8,
    __builtin_rev_crc32_data8, __builtin_rev_crc32_data16,
    __builtin_rev_crc32_data32
    __builtin_rev_crc64_data8, __builtin_rev_crc64_data16,
     __builtin_rev_crc64_data32, __builtin_rev_crc64_data64,
    __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 built-in 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 built-ins, 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.
    
    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 CRC related builtins.
    	(expand_builtin_crc_table_based): New function.
    	(expand_builtin): Handle CRC related builtins.
    	* 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.
    	(BUILT_IN_REV_CRC64_DATA8): Likewise.
    	(BUILT_IN_REV_CRC64_DATA16): Likewise.
    	(BUILT_IN_REV_CRC64_DATA32): Likewise.
    	(BUILT_IN_REV_CRC64_DATA64): Likewise.
    	* builtins.h (expand_builtin_crc_table_based): New function
    	declaration.
    	* doc/extend.texi: Add documentation for new CRC builtins.
    
    gcc/testsuite/
    
    	* gcc.dg/crc-builtin-rev-target32.c: New test.
    	* gcc.dg/crc-builtin-rev-target64.c: New test.
    	* gcc.dg/crc-builtin-target32.c: New test.
    	* gcc.dg/crc-builtin-target64.c: New test.
    
    Signed-off-by: default avatarMariam Arutunian <mariamarutunian@gmail.com>
    Co-authored-by: default avatarJoern Rennecke <joern.rennecke@embecosm.com>
    Co-authored-by: default avatarJeff Law <jlaw@ventanamicro.com>