簡體   English   中英

Intel 風格內聯匯編和 AT&T 風格、C++ 中的變量引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM