cpuid汇编指令替换分享
【摘要】 cpuid汇编指令替换为arm平台的汇编指令
一 问题背景
客户迁移过程中,编译一段获取TaiShan服务器的cpuid的代码时,出现编译报错:
要编译的嵌入式汇编片段
Ø 在编译时报错:不识别movl,xorl,cpuid等汇编指令
二 原因分析
Movl和xorl是x86平台上的汇编指令,cpuid也是x86平台上专有的获取cpuid信息的汇编指令,TaiShan服务器上没有这些汇编指令,需要将x86平台上的汇编指令替换为TaiShan服务器上的汇编指令。
Cupid是x86上的汇编指令,arm平台没有,需要根据arm的寄存器信息来获取cpuid,midr_el1寄存器里存放的是cpuid的信息,具体参考:https://developer.arm.com/docs/ddi0595/d/aarch64-system-registers/midr_el1
该midr_el1寄存器是一个64bit的寄存器,不过由于高32bit预留,读出来是一个32bit的值,高32bit默认补0
三 解决方案
根据arm平台的汇编指令,从midr_el1寄存器里读取cpuid到s1变量,实现获取cpuid的代码片段如下
经过验证,此代码编译后获取的cpuid与dmidecode -t processor获取的cpuid是一致的
四 总结
客户自研代码迁移时,如果遇到汇编指令报错(编译日志中有“Assembler messages”关键字),而ARM64上没有功能完全匹配的汇编指令时,可以使用arm平台下相应的汇编指令来实现。有些汇编指令是单条替换,有些汇编指令是根据功能来替换
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)