繁体   English   中英

XMVECTOR 类型的函数参数传递

[英]Function parameter passing of type XMVECTOR

为什么 FXMVECTOR 的定义在 32 位和 64 位上不同? 为什么不应该在 32 位上通过引用传递 XMVECTOR 来使用 SIMD 的荣耀?

先感谢您!

Microsoft Docs上详细介绍了各种调用约定宏和类型的详细信息。

简而言之,该库正试图在多个平台上支持合理的“最佳”调用约定:

  • 32 位__fastcall ,其中前三个 SIMD 值在寄存器中传递。 其余的必须通过引用传递,因为堆栈只保证 4 字节对齐。

  • 32 位__vectorcall (需要 VS 2013 或更高版本),其中最多在寄存器中传递前六个 SIMD 值,以及 HVA(即 SIMD 值矩阵)

  • 64 位__fastcall永远不会在寄存器中传递任何 SIMD 值,但堆栈是 16 字节对齐的。

  • 64 位__vectorcall (需要 VS 2013 或更高版本),其中最多在寄存器中传递前六个 SIMD 值,以及 HVA(即 SIMD 值矩阵)

  • ARM/ARM64 最多可传递寄存器中的前四个 SIMD 值并支持 HVA。

因此,为了确保事物可以在寄存器中传递,它们是“按值”传递的。 为了最小化副本,不太可能在寄存器中结束的东西应该“通过引用”传递。

当然,真正的希望是内联消除了最终优化代码中的调用约定用法,但您不能保证这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM