【汇编】get_mpidr()无法返回高32-bit

MPIDR_EL1(Multiprocessor Affinity Register)是armv8 结构体系中的一个64-bit系统寄存器,为cluster中的调度目标提供了一个识别机制,该寄存器的域段结构如下:

在这里插入图片描述

在搭建完成验证平台运行冒烟软件用例,main函数代码如下:

void main(void){

uint64 cpu_mpidr = 0;

cpu_mpidr = get_mpidr();
printf("mpidr = %lx",cpu_mpidr );

}

get_mpidr()是通过汇编实现,代码如下:

.type get_mpidr,%function
get_mpidr:
	mrs   x0,mpidr_el1
	ret

仿真完成后,通过log查看打印结果,mpidr只打印出了低32-bit,高32-bit未打印出来,起初怀疑是高位aff3没有赋值成功,但是从波形信号看是有值的;再分析编译后的文件,在获取到get_mpidr的值后赋值的过程中,将返回值处理为了32-bit,高32-bit丢失。
在这里插入图片描述
最后发现是由于在定义get_mpidr()时,将返回值设置为了32-bit,导致高32-bit丢失

extern uint32 get_mpidr();

将此处修改为64-bit返回值后,重新编译,可以看到返回值是通过64-bit寄存器将结果返回并赋值,通过仿真也可以将64-bit结果正常打印出来
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值