对应的ARMv8 aarch64的asm代码

时间:2018-06-14 04:18:16

标签: arm64 armv8

以下是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");

1 个答案:

答案 0 :(得分:0)

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

至少,维护基于程序协议的方法来处理这些变量;这就像对待魔法饼干一样只能由神秘的图书馆操作。标准版本鼓励一个令人遗憾的模糊定义由编译器直接实现;我能想象的最好的结果是调试编译器/运行时很多小时......

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