ARM SIMD instruction -- fcvt

Floating-point Convert precision (scalar). This instruction converts the floating-point value in the SIMD&FP source register to the precision for the destination register data type using the rounding mode that is determined by the FPCR and writes the result to the SIMD&FP destination register.

浮点转换精度(标量)。此指令使用FPCR确定的舍入模式将SIMD&FP源寄存器中的浮点值转换为目标寄存器数据类型的精度,并将结果写入SIMD&FPP目标寄存器。

Half-precision to single-precision variant

Applies when type == 11 && opc == 00.

FCVT <Sd>, <Hn>

Half-precision to double-precision variant

Applies when type == 11 && opc == 01.

FCVT <Dd>, <Hn>

Single-precision to half-precision variant

Applies when type == 00 && opc == 11.

FCVT <Hd>, <Sn>

Single-precision to double-precision variant

Applies when type == 00 && opc == 01.

FCVT <Dd>, <Sn>

Double-precision to half-precision variant

Applies when type == 01 && opc == 11.

FCVT <Hd>, <Dn>

Double-precision to single-precision variant

Applies when type == 01 && opc == 00.

FCVT <Sd>, <Dn>

int main()

{

char s16;

int a;

float f;

strcpy(&s0, "Hello, xiaozhi!");

a = 0x666;

f = 6.6;

printf("%s %x %f.\n", &s0, a, f);

}

/*

Hello, xiaozhi! 666 6.600000.

*/

#if 0

/*

* arm

*/

000000000040055c <main>:

40055c: a9bd7bfd stp x29, x30, sp, #-48!

400560: 910003fd mov x29, sp // x29=fp=sp

400564: 910063a2 add x2, x29, #0x18 // x2=x29+0x18

400568: 90000000 adrp x0, 400000 <_init-0x3e8> // x0=400000

40056c: 9119a000 add x0, x0, #0x668 // x0=400668

400570: a9400400 ldp x0, x1, x0 // x0=x0, x1=x0+8

400574: a9000440 stp x0, x1, x2 // x2=x0, x2+8=x1

400578: 5280ccc0 mov w0, #0x666 // #1638 w0=0x666

40057c: b9002fa0 str w0, x29, #44 // x29+44=w0

400580: 52866660 mov w0, #0x3333 // #13107 w0=0x3333

400584: 72a81a60 movk w0, #0x40d3, lsl #16 // w0=0x40d3<<16

400588: 1e270000 fmov s0, w0 // s0=w0

40058c: bd002ba0 str s0, x29, #40 // x29+40=s0

400590: bd402ba0 ldr s0, x29, #40 // s0=x29+40

400594: 1e22c000 fcvt d0, s0 // d0=s0

400598: 910063a1 add x1, x29, #0x18 // x1=x29+0x18

40059c: 90000000 adrp x0, 400000 <_init-0x3e8>

4005a0: 9119e000 add x0, x0, #0x678

4005a4: b9402fa2 ldr w2, x29, #44 // w2=x29+44

4005a8: 97ffffaa bl 400450 <printf@plt> // printf()

4005ac: 52800000 mov w0, #0x0 // #0

4005b0: a8c37bfd ldp x29, x30, sp, #48

4005b4: d65f03c0 ret

#endif

相关推荐
Apipi*7 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP8 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC10 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding10 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK11 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20811 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)11 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter62511 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
xh didida12 小时前
Linux -- 基础IO
linux·服务器·开发语言·c++
zly350013 小时前
centos7 mount设备挂载 /dev/sda1/硬盘挂载
linux·运维·服务器