Hi All,

This patch adds support for the SM3/SM4 cryptographic instructions added in 
Armv8.4-a. Support for the new instructions is in the form of new ACLE 
intrinsics. A new command line feature modifier, +sm4, is added to enable the 
support.

Test cases were added to verify that the ACLE Intrinsics generate the 
appropriate SM3/SM4 assembly instructions.

Bootstrapped on aarch64-none-elf. Tested with new binutils and verified all 
instructions assembly correctly.

Okay for trunk?

2017-11-10  Michael Collison  <michael.colli...@arm.com>

        * config/aarch64/aarch64-builtins.c:
        (aarch64_types_quadopu_imm_qualifiers, TYPES_QUADOPUI): New.
        * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
        (__ARM_FEATURE_SM3): Define if TARGET_SM4 is true.
        (__ARM_FEATURE_SM4): Define if TARGET_SM4 is true.
        * config/aarch64/aarch64.h (AARCH64_FL_SM4): New flags.
        (AARCH64_ISA_SM4): New ISA flag.
        (TARGET_SM4): New feature flag for sm4.
        * config/aarch64/aarch64-simd-builtins.def
        (aarch64_sm3ss1qv4si): Ditto.
        (aarch64_sm3tt1aq4si): Ditto.
        (aarch64_sm3tt1bq4si): Ditto.
        (aarch64_sm3tt2aq4si): Ditto.
        (aarch64_sm3tt2bq4si): Ditto.
        (aarch64_sm3partw1qv4si): Ditto.
        (aarch64_sm3partw2qv4si): Ditto.
        (aarch64_sm4eqv4si): Ditto.
        (aarch64_sm4ekeyqv4si): Ditto.
        * config/aarch64/aarch64-simd.md:
        (aarch64_sm3ss1qv4si): Ditto.
        (aarch64_sm3tt<sm3tt_op>qv4si): Ditto.
        (aarch64_sm3partw<sm3part_op>qv4si): Ditto.
        (aarch64_sm4eqv4si): Ditto.
        (aarch64_sm4ekeyqv4si): Ditto.
        * config/aarch64/iterators.md (sm3tt_op): New int iterator.
        (sm3part_op): Ditto.
        (CRYPTO_SM3TT): Ditto.
        (CRYPTO_SM3PART): Ditto.
        (UNSPEC_SM3SS1): New unspec.
        (UNSPEC_SM3TT1A): Ditto.
        (UNSPEC_SM3TT1B): Ditto.
        (UNSPEC_SM3TT2A): Ditto.
        (UNSPEC_SM3TT2B): Ditto.
        (UNSPEC_SM3PARTW1): Ditto.
        (UNSPEC_SM3PARTW2): Ditto.
        (UNSPEC_SM4E): Ditto.
        (UNSPEC_SM4EKEY): Ditto.
        * config/aarch64/constraints.md (Ui2): New constraint.
        * config/aarch64/predicates.md (aarch64_imm2): New predicate.
        * config/arm/types.md (crypto_sm3): New type attribute.
        (crypto_sm4): Ditto.
        * config/aarch64/arm_neon.h (vsm3ss1q_u32): New intrinsic.
        (vsm3tt1aq_u32): Ditto.
        (vsm3tt1bq_u32): Ditto.
        (vsm3tt2aq_u32): Ditto.
        (vsm3tt2bq_u32): Ditto.
        (vsm3partw1q_u32): Ditto.
        (vsm3partw2q_u32): Ditto.
        (vsm4eq_u32): Ditto.
        (vsm4ekeyq_u32): Ditto.
        (doc/invoke.texi): Document new sm4 option.
        gcc.target/aarch64/sm3_sm4.c: New testcase.

Attachment: crypto_sm4.patch
Description: crypto_sm4.patch

Reply via email to