https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71300
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |jakub at gcc dot gnu.org Resolution|--- |INVALID --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- ??? At least reading to 0.9.8 version of the ABI pdf, I see for YMM1 class: sizeof (bytes) VLEN=2 VLEN=4 VLEN=8 VLEN=16 ... any-type * 4/8 1*MI128/ 1*MI128/ 2*MI128/ 4*MI128/ any-type (*)() 1*MI128 2*MI128 4*MI128 8*MI128 ... double 8 1*MD128 1*MD256 2*MD256 4*MD256 The characteristic type is double in this function, therefore for YMM1 class (letter c) this function is VLEN=4, which means the first argument is passed in __m256d (holding 4 doubles) and the second argument is passed in a pair of __m128i (each holding 2 pointers). This is because AVX generally doesn't support 256-bit integer vector operations. If you look at YMM2 class instead, pointers are passed in __m256i instead (for VLEN=4 and above).