https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72736
James Greenhalgh <jgreenhalgh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |jgreenhalgh at gcc dot gnu.org Resolution|--- |INVALID --- Comment #3 from James Greenhalgh <jgreenhalgh at gcc dot gnu.org> --- I see several misunderstandings wrapped up in this bug - but as far as I can see everything is working as documented (even if that documentation may not be the easiest to decipher), so I'm resolving the report as invalid. In short, try: $CC -mcpu=cortex-a53 -mfpu=crypto-neon-fp-armv8 (and -mfloat-abi=hard/softfp if that is not preconfigured in your compiler) See https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html for options applicable to the ARM port. -march=armv8-a+crc+crypto As I'm sure you've spotted from the error message given by the compiler, this is not a valid value to pass to -march. The closest is -march=armv8-a+crc . This would ask the compiler to generate instructions for the ARMv8-A architecture profile, with the optional CRC32 extensions. That gets you halfway to what you actually want (which is for the compiler to enable both the CRC32 extensions and the Crypto extensions). warning: switch -mcpu=cortex-a53 conflicts with -march=armv8-a switch As you've correctly identified, the CRC32 extension is optional for ARMv8-A implementations, thus -march=armv8-a does not enable support for it. However, the Cortex-A53 always provides the CRC32 extension, and -mcpu=cortex-a53 would enable support for it. This is the conflict GCC is warning about; -march=armv8-a turns off the CRC32 extension, but -mcpu=cortex-a53 would turn on the CRC32 extension. Note that -mcpu=$foo is a shorthand for -mtune=$foo -march=`arch_of ($foo)` so you only need -mcpu=cortex-a53 on your command line to enable support for the CRC32 extensions. -mfpu=neon As you might know; historically ARM floating-point and vector hardware units were implemented as coprocessors and were to some extent interchangeable. Thus, the ARM port of GCC decouples the choice of floating-point and vector unit (under the -mfpu= option) and architecture (under the -march= option). Here you are asking the compiler to generate code for "neon". This option refers to the Advanced SIMD instructions as defined in ARMv7-A and implemented in Cortex-A8 and similar processors. The other bit of knowledge you need is that the Cryptographic extensions use the Advanced SIMD registers, and are therefore considered by GCC to be something that should be enabled by an -mfpu option. Checking the list of valid options, you will want crypto-neon-fp-armv8 . -D__ARM_FEATURE_CRYPTO -D__ARM_FEATURE_CRC These macros are predefined by the compiler when it thinks you have support for these features. Defining them yourself is unlikely to work well, as you've discovered.