double强制类型转换int64_t的结果为0问题
发布日期:2021-06-30 10:11:32 浏览次数:4 分类:技术文章

本文共 647 字,大约阅读时间需要 2 分钟。

armv71   gcc 4.6.3 内核态xenomai

测试代码1:

int64_t func(){    double a;    ...    return (int64_t)a;}

返回值一直都是0.

改为:

int64_t func(){    double a;    ...    return (int32_t)a;}

返回值正确。

同样是32位,x86下使用却都是正确的。

 

分析

这里尝试分析一下汇编代码:

int64_t强转部分代码:

9970:	ee32 0b01 	vadd.f64	d0, d2, d1   ;d0 := d2 + d1    9974:	f001 f9a0 	bl	acb8 <__aeabi_d2lz>    ;    9978:	6320      	str	r0, [r4, #48]	; 0x30  ;  [r4, #48] := r0

int32_t强转部分代码:

996a:	ee32 0b01 	vadd.f64	d0, d2, d1    996e:	eebd 0bc0 	vcvt.s32.f64	s0, d0    9972:	ed80 0a0c 	vstr	s0, [r0, #48]	; 0x30

这里vcvt.s32.f64是VFP指令,使用的是浮点硬件单元FPU进行计算处理的,其中并不包含s64。

而__aeabi_d2lz为双精度到整型C型转换,是调用软件函数库进行处理的。

目前猜测是由于__aeabi_d2lz出错?

转载地址:https://islet.blog.csdn.net/article/details/113866003 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:处理wxPython TreeCtrl刷新节点名称造成的闪烁问题
下一篇:OPCUA 设置登录用户名与密码

发表评论

最新留言

很好
[***.229.124.182]2024年04月24日 13时34分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章