浮点数寄存器与指令

本文介绍了AVX浮点体系结构中的16个YMM寄存器,用于存储浮点数据。讨论了浮点传送和转换操作,包括浮点数在内存和寄存器间的传递,以及不同精度之间的转换。还提到了运算操作,如标量AVX2浮点指令,以及位级操作和比较操作,其中比较操作的源操作数可能来自XMM寄存器或内存。

寄存器

AVX浮点体系结构允许数据存储在16个YMM寄存器中

2551270
%ymm0%xmm01st FP arg.返回值
%ymm1%xmm12nd FP参数
%ymm2%xmm23rd FP参数
%ymm3%xmm34th FP参数
%ymm4%xmm45th FP参数
%ymm5%xmm56th FP参数
%ymm6%xmm67th FP参数
%ymm7%xmm78th FP参数
%ymm8%xmm8调用者保存
%ymm9%xmm9调用者保存
%ymm10%xmm10调用者保存
%ymm11%xmm11调用者保存
%ymm12%xmm12调用者保存
%ymm13%xmm13调用者保存
%ymm14%xmm14调用者保存
%ymm15%xmm15调用者保存

媒体寄存器。这些寄存器用于存放浮点数据。每个YMM寄存器保存32个字节。低16字节可以作为XMM寄存器来访问

浮点传送和转换操作

指令目的描述
vmovssM32X传送单精度数
vmovssXM32传送单精度数
vmovsdM64X传送双精度数
vmovsdXM64传送双精度数
vmovapsXX传送对齐的封装好的单精度数
vmovapdXX传送对齐的封装好的双精度数

浮点传送指令。这些操作在内存和寄存器之间以及一对寄存器之间传送值(X:XMM寄存器(例如%xmm3);M32:32位内存范围;M64:64位内存范围)

指令目的描述
vcvttss2siX/M32R32用截断的方法把单精度数转换成整数
vcvttsd2siX/M64R32用截断的方法把双精度数转换成整数
vcvttss2siqX/M32R64用截断的方法把单精度数转换成四字整数
vcvttsd2siqX/M64R64用截断的方法把双精度数转换成四字整数

双操作数浮点转换指令。这些操作将浮点数转换成整数(X:XMM寄存器(例如%xmm3); R32:32位通用寄存器(例如%eax);R64:64位通用寄存器(例如%rax);M32:32位内存范围;M64:64位内存范围)

指令源1源2目的描述
vcvtsi2ssM32/R32XX把整数转换成单精度数
vcvtsi2sdM32/R32XX把整数转换成双精度数
vcvtsi2ssqM64/R64XX把四字整数转换成单精度数
vcvtsi2sdqM64/R64XX把四字整数转换成双精度数

三操作数浮点转换指令。这些操作将第一个源的数据类型转换成目的数据类型。第二个源值对结果的低位字节没有影响(X:XMM寄存器(例如%xmm3);M32:32位内存范围;M64:64位内存范围)

gcc实现单精度与双精度的转换需要单独说明(就不具体解释了)

Conversion from single to double precision
vunpcklps %xmm0, %xmm0, %xmm0   Replicate first vector element
vcvtps2pd %xmm0, %xmm0          Convert two vector elements to double
Conversion from double to single precision
vmovddup %xmm0, %xmm0            Replicate first vector element
vcvtpd2psx %xmm0, %xmm0          Convert two vector elements to single

运算操作

标量avx2浮点指令。每条指令有一个(S1)或两个(S1,S2)源操作数,和一个目的操作数。第一个源操作数S1可以是一个XMM寄存器或一个内存位置。第二个源操作数和目的操作数都必须是XMM寄存器。每个操作都有一条针对单精度的指令和一条针对双精度的指令。结果存放在目的寄存器中。

单精度双精度效果描述
vaddssvaddsdD<—S2+S1浮点数加
vsubssvsubsdD<—S2-S1浮点数减
vmulssvmulsdD<—S2xS1浮点数乘
vdivssvdivsdD<—S2/S1浮点数除
vmaxssvmaxsdD<—max(S2,S1)浮点数最大值
vminssvminsdD<—min(S2,S1)浮点数最小值
sqrtsssqrtsdD<—22浮点数平方根

位级操作

单精度双精度效果描述
vxorpsvorpdD<—S2^S1位级异或(EXCLUSIVE–OR)
vandpsandpdD<—S2&S1位级与(AND)

对封装数据的位级操作(这些指令对一个XMM寄存器中的所有128位进行布尔操作)

比较操作

指令基于描述
ucomiss S1,S2S2-S1比较单精度值
ucomisd S1,S2S2-S1比较双精度值

参数S2必须在XMM寄存器中,而S1可以在XMM寄存器中,也可以在内存中

条件码的设置如下:

顺序S2:S1CFZFPF(奇偶标志位)
无序的(NaN)111
S2 < S1100
S2 = S1010
S2 > S1000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值