只包含一個定義列表,用於稍後討論用於傳遞函數參數的算法。
特別地,SSE類中一個新的矢量寄存器總是傳遞,第一個可用的%xmm0-%xmm7
。
請注意,這些名稱是指寄存器的低128位部分,但更好的方法是使用可變大小的向量寄存器%v0-%v7
。
該SSEUP類傳遞在下一個可用的64位(八字節)的最後矢量寄存器使用。然後
__m256
通過,在支持AVX處理器,利用單個%ymm
寄存器:低64位得到SSE類 - 並且因此新%v0
寄存器 - 而其他三個64比特的塊得到SSEUP從而重新使用%v0
寄存器。
下面是從文檔的相關報價:
- 如果類SSE,下一個可用的向量寄存器時,寄存器 採取的順序從%xmm0到%xmm7。
- 如果類是SSEUP,則在最後一個使用的向量寄存器的下一個可用的8字節 塊中傳遞該八字節。
的SSEUP類先前在ABI推出,它今天仍然存在。
您可以快速查閱Version 0.9以查看差異:例如,_m256
和_m512
類型不存在。
對於編譯器不與_m256
類型或編譯器確實支持它,但沒有支持AVX目標處理器支持新的ABI,該類型通常爲an aggregate of two _m128
,因此通過後述的規則(特別是後合併規則)它在內存中傳遞:
- 如果一個物體的尺寸是多於兩個eightbytes更大,或在C++中,是一個nonPOD結構或聯合型,或包含未對齊字段,它具有 類記憶。
對於如果總的尺寸超過2個eightbytes和第一eightbyte 不是SSE或任何其他eightbyte不SSEUP使用舊ABI
編譯器,整個論點 是記憶中傳遞。
對於使用新ABI
該標準承認混淆主要是由於需要解決向後兼容,SSE和SSEUP分類編譯器是在一個體繫結構方便的分類,其中矢量寄存器不斷擴大,不同大小的廣泛範圍已經出現在那裏。