linux xchgl 汇编含义,X86 xchgl和cmpxchgl指令替换案例分享

本文介绍了在客户将代码从X86迁移到ARM64过程中遇到的xchgl和cmpxchgl汇编指令不被识别的问题。这两个指令在X86上用于原子操作,但在ARM64上需要替换。文章详细解析了xchgl和cmpxchgl的含义,并提供了使用GCC原子操作接口__atomic_exchange_n和__atomic_compare_exchange_n进行替换的解决方案,同时讨论了内存屏障的选择和其对多线程一致性的影响。
摘要由CSDN通过智能技术生成

1问题背景

客户迁移过程中,编译自研代码时,有如果两个编译报错:

Ø不识别xchgl汇编指令

{standard input}: Assembler messages:

{standard input}:1222: Error: unknown mnemonic `xchgl' -- `xchgl x1,[x19,112]'

{standard input}:1225: Error: unknown mnemonic `xchgl' -- `xchgl x0,[x19,88]'

Ø不识别cmpxchgl汇编指令

{standard input}: Assembler messages:

{standard input}:1222: Error: unknown mnemonic `cmpxchgl'

2原因分析

spacer.gifxchgl和 cmpxchgl都是X86上的指令集,ARM64上不识别,需要进行替换。xchgl指令的作用是交换 (寄存器/内存变量)和 (寄存器) 的值。如果交换的两个变量中有内存变量,会对内存变量增加原子锁操作。详细见以下释义:

cmpxchgl指令的作用是比较并交换两数。详细见官网释义:

spacer.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值