[英]Variable references in Intel style inline assembly and AT&T style, C++
我需要使用 G++ 4.6.1 在 Visual Studio 和 IDE 中編譯一些匯編代碼。 只要我不引用和尋址任何變量,-masm=intel 標志就可以工作,但是我需要這樣做。
我考慮過使用內在函數,但編譯后的程序集根本不是最優的(例如,我無法定義要使用的 sse-register,因此不可能進行管道優化)。
考慮代碼的這些部分(inte 樣式程序集):
mov ecx, dword ptr [p_pXcoords]
mov edx, dword ptr [p_pYcoords]
movhpd xmm6, qword ptr [oAvgX]
movhpd xmm7, qword ptr [oAvgY]
movlpd xmm6, qword ptr [oAvgX]
movlpd xmm7, qword ptr [oAvgY]
其中 p_pXcoords 和 p_pYcoords 是雙精度數組和函數參數,oAvgX 和 oAvgY 是簡單的雙精度值。
另一行代碼是這樣的,它位於匯編塊的中間:
movhpd xmm6, qword ptr [oAvgY]
換句話說,我需要訪問變量並在代碼中間的特定 sse 寄存器中使用它們。 我怎樣才能用 AT & T 語法做到這一點,最好:我可以使用 -masm 標志用 g++ 編譯器做到這一點嗎?
有沒有辦法對 VS 和基於 g++ 4.6.1 的編譯器使用一個匯編代碼
您當然可以告訴 GCC 為每個變量使用哪個 SSE 寄存器:
register __m128i x asm("xmm6");
但我猜 VS 不支持。 (我也有點驚訝你需要它以獲得良好的性能。寄存器分配和指令調度是優化編譯器知道的兩個最基本的事情。你確定你啟用了優化:-)?)
我可能只寫兩個函數,一個使用內在函數,一個使用 asm 來處理不知道如何正確安排指令的編譯器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.