This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: vmull_p64 failed to compile on armv8
- From: Jeffrey Walton <noloader at gmail dot com>
- To: Lincoln Thurlow <lthurlow at ucsc dot edu>
- Cc: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Fri, 29 Jul 2016 21:48:39 -0400
- Subject: Re: vmull_p64 failed to compile on armv8
- Authentication-results: sourceware.org; auth=none
- References: <9B6C7ED4-C899-4B99-B5B7-7C81B1084865@ucsc.edu>
- Reply-to: noloader at gmail dot com
> I am trying to use the vmull_p64 instruction. The error I am receiving is:
>
> /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h: In function ‘__v16u mul128(uint64x1_t, uint64x1_t)’:
> /usr/lib/gcc/aarch64-linux-gnu/6/include/arm_neon.h:21892:1: error: inlining failed in call to always_inline ‘poly128_t vmull_p64(poly64_t, poly64_t)’: target specific option mismatch
> vmull_p64 (poly64_t a, poly64_t b)
> ^~~~~~~~~
> gf64_vmull.cpp:138:27: note: called from here
> res = vmull_p64(a64,b64);
PMULL and PMULL2 are part of the Crypto extensions from the ACLE. They
are optional extensions, so they get enabled with a "+crypto" for
architecture flags. You should add -march=armv8-a+crypto or
-march=armv8-a+crc+crypto to your CFLAGS or CXXFLAGS. Also see
http://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html.
An FYI... Linaro is missing is missing vreinterpretq_*_p128 for for
converting polynomials. If you are using the Linaro GCC 4.9 toolchain,
then you will have to do the C-cast. Also see
http://lists.linaro.org/pipermail/linaro-toolchain/2016-July/005833.html.
Note... if you attempt Aarch32 on Aarch64, then there could be other
complications. I still have not figured out this problem. Also see
http://www.96boards.org/forums/topic/compile-and-execute-an-aarch32-program-on-aarch64/
.
Jeff