This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/71233] [ARM] missing AdvSIMD intrinsics


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

--- Comment #6 from Christophe Lyon <clyon at gcc dot gnu.org> ---
I used the perl script and intrinsics list to build several subsets:

# List of duplicates: (a few intrinsics are listed twice
# with different prototypes, it's likely a bug in the documentation,
# not sure where to report this?)
perl neon_intrinsics.pl < intrinsics.txt |awk '{print $3;}' |sort |uniq -c
|sort -n| grep -v '^ *1 '

# List of intrinsics supported by all arches:
perl neon_intrinsics.pl < intrinsics.txt |grep v7 |awk '{print $3;}' >
intrinsics-v7-a32-a64.txt

# List of intrinsics supported by armv8 (a32+a64 modes):
perl neon_intrinsics.pl < intrinsics.txt |grep -v v7 |grep A32|awk '{print
$3;}' > intrinsics-a32-a64.txt

# List of intrinsics supported only by aarch64:
perl neon_intrinsics.pl < intrinsics.txt |grep -v A32 |awk '{print $3;}' >
intrinsics-a64.txt


Then I generated sample .i files to see which intrinsics are actually supported
by the compiler. I hope I used the right flags to get maximum coverage in
AArch32 mode.


# Generate supported intrinsics:
# -dD needed as some intrinsics are defined by macros
# hello-arm-neon.c:
# #include <arm_neon.h>
#
# AArch64
aarch64-none-linux-gnu-gcc -E -dD hello-arm-neon.c > hello-arm-neon-aarch64.i

# AArch32/v8
arm-none-linux-gnueabihf-gcc -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8 -E -dD
hello-arm-neon.c > hello-arm-neon-aarch32-v8.i

# AArch32/v7 with fp16 for maximum coverage
arm-none-linux-gnueabihf-gcc -mcpu=cortex-a9 -mfpu=neon-fp16 -mfp16-format=ieee
-E -dD hello-arm-neon.c > hello-arm-neon-aarch32-v7.i

# List of A32/A64 intrinsics not present in arm/arm_neon.h
for i in `cat intrinsics-a32-a64.txt `; do
    grep -q $i hello-arm-neon-aarch32-v8.i ||echo "$i"
done > intrinsics-missing-arm-a32-a64.txt

# List of A32/A64 intrinsics not present in aarch64/arm_neon.h
for i in `cat intrinsics-a32-a64.txt `; do
    grep -q $i hello-arm-neon-aarch64.i ||echo "$i"
done > intrinsics-missing-aarch64-a32-a64.txt

# List of v7/a32/a64 intrinsics not present in aarch64/arm_neon.h
for i in `cat intrinsics-v7-a32-a64.txt `; do
    grep -q $i hello-arm-neon-aarch64.i ||echo "$i"
done > intrinsics-missing-aarch64-v7.txt

# List of v7/a32/a64 intrinsics not present in arm/arm_neon.h
for i in `cat intrinsics-v7-a32-a64.txt `; do
    grep -q $i hello-arm-neon-aarch32-v7.i ||echo "$i"
done > intrinsics-missing-arm-v7.txt

# List of A64 intrinsics not present in aarch64/arm_neon.h
for i in `cat intrinsics-a64.txt `; do
    grep -q $i hello-arm-neon-aarch64.i ||echo "$i"
done > intrinsics-missing-aarch64-a64.txt


I have also attached the intermediate results I got:
* lists of intrinsics supported in v7/a32/a64, a32/a64 or a64 only:
intrinsics-v7-a32-a64.txt
intrinsics-a32-a64.txt
intrinsics-a64.txt

* lists of intrinsics missing in aarch32 mode:
intrinsics-missing-arm-v7.txt
intrinsics-missing-arm-a32-a64.txt

* lists of intrinsics missing in aarch64 mode:
intrinsics-missing-aarch64-v7.txt
intrinsics-missing-aarch64-a32-a64.txt
intrinsics-missing-aarch64-a64.txt

So, there are still several intrinsics documented but not implemented, unless I
missed something (that's why I attached my script and process).

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]