2010-12-19 71 views
2

這是原來的代碼進行編譯:我需要幫助英特爾內聯彙編轉換到AT&T這樣我就可以用gcc

#define CPU_PREFETCH(cache_line)   \ 
{ int* address = (int*) (cache_line);  \ 
    _asm mov edx, address     \ 
    _asm prefetcht0[edx]     \ 
} 

#define CPU_GET_CYCLES(low)     \ 
{           \ 
    _asm rdtsc       \ 
    _asm mov dword ptr [low], eax  \ 
} 

#define CPU_SYNC       \ 
{           \ 
    _asm mov eax, 0      \ 
    _asm cpuid       \ 
} 

#define CPU_CACHE_FLUSH(cache_line)   \ 
{ int* address = (int*) (cache_line);  \ 
    _asm mov edx, address     \ 
    _asm clflush[edx]      \ 
    _asm mfence        \ 
} 

感謝小丑,我現在有這樣的:

#define CPU_PREFETCH(cache_line) \ 
{ \ 
    __asm__ __volatile__ ("prefetcht0 %0" : : "m" (*(int*)cache_line)); \ 
} 

#define CPU_GET_CYCLES(low) \ 
{ \ 
    __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "%edx"); \ 
} 

#define CPU_SYNC \ 
{ \ 
    __asm__ __volatile__ ("cpuid" : : : "%eax", "%ebx", "%ecx", "%edx"); \ 
} 

#define CPU_CACHE_FLUSH(cache_line) \ 
{ \ 
    __asm__ ("clflush %0; mfence" : : "m" (*(int*)cache_line)); \ 
} 

顯然,海灣合作委員會不喜歡易變與clflush。 謝謝大家。

我想編譯Slicing-By-8與gcc作爲一個DLL,所以我可以在我的VB6應用程序中使用它。

回答

4

會很高興使用正確的內聯函數。無論如何,這裏是你的宏版本:

#define CPU_PREFETCH(cache_line) \ 
{ \ 
    __asm__ __volatile__ ("prefetcht0 %0" : : "m" (*(int*)cache_line)); \ 
} 

#define CPU_GET_CYCLES(low) \ 
{ \ 
    __asm__ __volatile__ ("rdtsc" : "=a" (low) : : "%edx"); \ 
} 

#define CPU_SYNC \ 
{ \ 
    __asm__ __volatile__ ("cpuid" : : : "%eax", "%ebx", "%ecx", "%edx"); \ 
} 

#define CPU_CACHE_FLUSH(cache_line) \ 
{ \ 
    __asm__ __volatile__ ("clflush %0; mfence" : : "m" (*(int*)cache_line)); \ 
} 
+0

男人,看起來很漂亮,看起來好像你確切地知道你在做什麼:)無論如何,我現在得到這個錯誤:錯誤:操作數大小不匹配'clflush' – selyb 2010-12-19 17:22:26

+0

我試圖點擊這篇文章是有用的,但我不沒有足夠的聲譽 – selyb 2010-12-19 19:14:16

3

而不是將您的英特爾語法轉換爲AT & T,爲什麼不告訴GCC您只是想編譯英特爾語法?

你可以這樣說:

任何其他組裝線前加入這一行:

asm(".intel_syntax noprefix\n"); 

然後像這樣運行GCC:

gcc -o my_output_file -masm=intel my_src_file.c

感謝stingdukBiW Reversing

+0

這給了我一個不同的錯誤,如第一篇文章所示。 – selyb 2010-12-19 08:54:15

+0

他忘了添加反斜槓。 – 2010-12-19 17:01:02

+0

再次更新第一篇文章 – selyb 2010-12-19 17:08:15