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.

Reply via email to