https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82641

--- Comment #3 from Yichao Yu <yyc1992 at gmail dot com> ---
> ARMv8-a is the only architecture variant where the CRC extension is optional

Not really. There's also armv8-r and armv8-m. Also, I believe code compiled for
armv7-a can run on armv8-a hardware and can also optionally enable armv8
features including CRC extension. I was hoping that GCC can be smart enough to
enable the correct armv8 variant automatically.

Test case is just

```
#include <stdint.h>

#pragma GCC push_options
#pragma GCC target("armv8-a+crc")
__attribute__((target("armv8-a+crc"))) uint32_t crc32cw(uint32_t crc, uint32_t
val)
{
    uint32_t res;
    /* asm(".arch armv8-a"); */
    /* asm(".arch_extension crc"); */
    asm("crc32cw %0, %1, %2" : "=r"(res) : "r"(crc), "r"(val));
    /* asm(".arch armv7-a"); */
    return res;
}
#pragma GCC pop_options
```

Compiled with either armv7-a or armv8-a march.

Reply via email to