gcc - 如何在函数中返回寄存器 YMM0/1 中的两个 256 位 YMM 值(不涉及内存)
问题描述
我的目标是在不使用内存的情况下返回一个 4x4 浮点矩阵作为函数的返回值。正如“x86 调用约定”的 Wiki 文章 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};
}
但是 gcc 给了我这个结果:
mov %rdi,%rax
vmovaps %ymm1,(%rdi)
vmovaps %ymm2,0x20(%rdi)
retq
我期待这样的事情:
vmovaps %ymm1, %ymm0
vmovaps %ymm2, %ymm1
retq
有没有办法强制 gccMat4
在 YMM0 和 YMM1 中返回整个结构?