https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111645
Carl Love <carll at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |carll at gcc dot gnu.org --- Comment #5 from Carl Love <carll at gcc dot gnu.org> --- There are a couple of issues with the test case in the attachment. For example one of the tests is: static inline vui64_t vec_vsldbi_64 (vui64_t vra, vui64_t vrb, const unsigned int shb) { return vec_sldb (vra, vrb, shb); } When I tried to compile it, it seemed to compile. However if I take off the static inline, then I get an error about in compatible arguments. The built-in requires an explicit integer be based in the third argument. The following worked for me: static inline vui64_t vec_vsldbi_64 (vui64_t vra, vui64_t vrb, const unsigned int shb) { return vec_sldb (vra, vrb, 1); } The compiler/assembler needs an explicit value for the third argument as it has to generate the instruction with the immediate shift value as part of the instruction. Hence a variable for the third argument will not work. Agreed that the __int128 arguments can and should be supported. Patch to add that support is in progress but will require getting the LLVM/OpenXL team to agree to adding the __128int variants as well.