当前位置:   article > 正文

arm平台适配总结_lldb arm/arm64的适配

lldb arm/arm64的适配

cmake获取平台信息:set(PLATFORM = $(strip $(shell echo `uname -m`)))

1. 编译参数

arm平台不支持“-m32"和“-m64"这样的编译参数。取而代之用 “-mabi=ilp32“ 和 “-mabi=lp64” 代替。还可以在指定 cpu的架构版本,如:
bazel build --cxxopt="-march=armv8-a" --cpu aarch64 ...

2. 内存对齐

arm平台默认的内存pagesize 和 x86平台不一致。

3. 原子操作

4.获取精确时间

#ifdef __aarch64__

#define RDTSC() ({ uint64_t time; __asm__ __volatile__ ("mrs %0, PMCCNTR_EL0" : "+r" (time)); time; })

#elif defined( __x86_64__)

#define RDTSC() ({ register uint32_t a,d; __asm__ __volatile__( "rdtsc" : "=a"(a), "=d"(d)); (((uint64_t)a)+(((uint64_t)d)<<32)); })

#else

#define RDTSC() ({ register uint64_t time; __asm__ __volatile__( "rdtsc" : "=A"(time)); time; })

5.内存屏障差异

#ifdef __aarch64__

#define CAS32(ptr, val_old, val_new) __sync_bool_compare_and_swap(ptr, val_old, val_new)

#define wmb() asm volatile("dmb ishst" ::: "memory")

#define rmb() asm volatile("dmb ishld" ::: "memory")

#else

#define CAS32(ptr, val_old, val_new)({ char ret; __asm__ __volatile__("lock; cmpxchgl %2,%0; setz %1": "+m"(*ptr), "=q"(ret): "r"(val_new),"a"(val_old): "memory"); ret;})

#define wmb() __asm__ __volatile__("sfence":::"memory")

#define rmb() __asm__ __volatile__("lfence":::"memory")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/80832
推荐阅读
相关标签
  

闽ICP备14008679号