代码中汇编指令需要重写
现象描述
ARM的汇编语言与x86完全不同,需要重写,涉及使用嵌入汇编的代码,都需要针对ARM进行配套修改。
处理步骤
需要重新实现汇编代码段。
示例:
- 在x86架构下:
static inline long atomic64_add_and_return(long i, atomic64_t *v) { long i = i; asm_volatile_( "lock ; " "xaddq %0, %1;" :"=r"(i) :"m"(v->counter), "0"(i)); return i + __i; } static inline void prefetch(void *x) { asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x)); }
- 在ARM64平台下,使用GCC内置函数实现:
static __inline__ long atomic64_add_and_return(long i, atomic64_t *v) { return __sync_add_and_fetch(&((v)->counter), i); } #define prefetch(_x) __builtin_prefetch(_x) 以__sync_add_and_fetch为例,编译后其反汇编对应代码如下所示: <__sync_add_and_fetch >: ldxr x2, [x0] add x2, x2, x1 stlxr w3, x2, [x0]
父主题: 源码修改类问题