cpuid汇编指令替换分享

举报
阿刚 发表于 2020/02/13 15:08:39 2020/02/13
【摘要】 cpuid汇编指令替换为arm平台的汇编指令

一 问题背景

客户迁移过程中,编译一段获取TaiShan服务器的cpuid的代码时,出现编译报错:

要编译的嵌入式汇编片段

1581577468782995.png


Ø  在编译时报错:不识别movl,xorl,cpuid等汇编指令

1581577488300696.png

二 原因分析


Movlxorlx86平台上的汇编指令,cpuid也是x86平台上专有的获取cpuid信息的汇编指令,TaiShan服务器上没有这些汇编指令,需要将x86平台上的汇编指令替换为TaiShan服务器上的汇编指令。

Cupidx86上的汇编指令,arm平台没有,需要根据arm的寄存器信息来获取cpuidmidr_el1寄存器里存放的是cpuid的信息,具体参考:https://developer.arm.com/docs/ddi0595/d/aarch64-system-registers/midr_el1

midr_el1寄存器是一个64bit的寄存器,不过由于高32bit预留,读出来是一个32bit的值,高32bit默认补0


1581577530846061.png


三 解决方案


根据arm平台的汇编指令,从midr_el1寄存器里读取cpuids1变量,实现获取cpuid的代码片段如下

1581577590552347.png

经过验证,此代码编译后获取的cpuiddmidecode -t processor获取的cpuid是一致的


四 总结

客户自研代码迁移时,如果遇到汇编指令报错(编译日志中有“Assembler messages”关键字),而ARM64上没有功能完全匹配的汇编指令时,可以使用arm平台下相应的汇编指令来实现。有些汇编指令是单条替换,有些汇编指令是根据功能来替换


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。