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

--- Comment #5 from Devin Hussey <husseydevin at gmail dot com> ---
Well, if we are aiming for strict compliance, might as well throw out every GCC
extension in existence (including vector extensions), those aren't strictly
compliant to the C/C++ standard. /s

The whole point of extensions are to be an extension that violates the
standard.


#include <arm_neon.h>

uint64x2_t mult(uint64x2_t top, uint64x2_t bot)
{
    return top * bot;
}


I am breaking two rules here:
1. Using operator overloads, which are not part of the standard.
2. Implying a nonexistent instruction, as there is no vmul.i64. (it is
scalarized at the moment, but I explained in bug 88510 that there are better
options)


Clang even allows this:


#include <arm_neon.h>

uint32x4_t mult(uint16x8_t top, uint32x4_t bot)
{
    return top * bot;
}


In which it will reinterpret all to the widest lane type.

Reply via email to