gpt4 book ai didi

c - 我需要帮助将 Intel 内联 asm 转换为 AT&T,以便我可以使用 gcc 编译它

转载 作者:行者123 更新时间:2023-12-04 11:33:44 27 4
gpt4 key购买 nike

这是原始代码:

#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 \
}

感谢 Jester,我现在有了这个:
#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)); \
}

显然,gcc 不喜欢 volatile 与 clflush。
谢谢大家。

我正在尝试编译 Slicing-By-8使用 gcc 作为 dll,所以我可以在我的 VB6 应用程序中使用它。

最佳答案

使用适当的内联函数会很好。无论如何,这是您的宏版本:

#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)); \
}

关于c - 我需要帮助将 Intel 内联 asm 转换为 AT&T,以便我可以使用 gcc 编译它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com