0

以下是 X86-64 代码的代码,其中包含一些程序集,请您帮助我们将程序集转换为 ARMv8 aarch64

__asm__ __volatile__ ("lock; cmpxchgw %1,%2"
                      : "=a"(sPrev)
                      : "q"(aWith),
                        "m"(*(volatile acp_sint16_t *)aAddr),
                        "0"(aCmp)
                      : "memory");

__asm__ __volatile__ ("mov %%ebx,%%eax\n\t"
                      "mov %%ecx,%%edx\n\t"
                      "lock; cmpxchg8b %1"
                      : "=&A"(sVal)
                      : "m"(*(volatile acp_sint64_t *)aAddr)
                      : "cc");

__asm__ __volatile__ ("lock; xaddq %0,%1"
                      : "+r"(sPrev), "+m"(*(volatile acp_sint64_t *)aAddr)
                      :
                      : "memory");
4

1 回答 1

0

您的开发环境已经在 stdatomic.h 的某些变体中具有等价物。关键概念是相同的,只是您必须在“弱”和“强”等难以理解的变体之间进行选择......

至少,对这些变量保持基于程序协议的方法;那就是把它们当作只能由神秘图书馆操作的魔法饼干。standard-du-jour 鼓励由编译器直接实现一个可悲的模糊定义。我能想象的最好的结果是调试编译器/运行时数小时.....

隔离机器或执行特定的依赖关系总是好的软件工程。

于 2018-06-18T03:35:05.827 回答