我有一个涉及手写汇编-AT&T语法的项目,可以和GCC一起使用,但我没有完成,而且我对汇编知之甚少 - 在尝试使用Clang构建它时出现了一个奇怪的问题.
LLVM文档提到 "大多数X86目标"使用LLVM的集成汇编程序而不是系统汇编程序; 作为一种可能的解决方法,我想明确使用后者.我(好吧,Google)没有成功找到有关如何执行此操作的信息.
问题:有没有办法要求或者强迫Clang/LLVM使用系统汇编程序而不是集成程序集?
(我知道我总是可以去阅读Source™,但我想知道是否有文档化的方法.)
我在互联网上找到了__sync_val_compare_and_swap的实现:
#define LOCK_PREFIX "lock ; "
struct __xchg_dummy { unsigned long a[100]; };
#define __xg(x) ((struct __xchg_dummy *)(x))
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
unsigned long new, int size)
{
unsigned long prev;
switch (size) {
case 1:
__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 2:
__asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
: "=a"(prev)
: "q"(new), "m"(*__xg(ptr)), "0"(old)
: "memory");
return prev;
case 4:
__asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2" …Run Code Online (Sandbox Code Playgroud)