Моя цель - вернуть матрицу 4x4 с плавающей запятой в качестве возвращаемого значения функции без использования памяти. Как указано в статье Wiki «Соглашения о вызовах x86» https://en.wikipedia.org/wiki/X86_calling_conventions#System_V_AMD64_ABI, можно вернуть до двух значений с плавающей запятой из функции, используя XMM0 и XMM1.
Я пытался это:
struct Mat4 // just a simple struct for testing
{
__m256 m0, m1;
};
Mat4 Foo(__m256 m0, __m256 m1, __m256 m2, __m256 m3)
{
return {m1, m2};
}
Но g cc дает мне это в результате:
mov %rdi,%rax
vmovaps %ymm1,(%rdi)
vmovaps %ymm2,0x20(%rdi)
retq
Я ожидал что-то вроде этого:
vmovaps %ymm1, %ymm0
vmovaps %ymm2, %ymm1
retq
Есть ли Можно ли заставить g cc вернуть всю структуру Mat4
всего за YMM0 и YMM1?