VFNCVT 和 VFWCVT 的方向有什么区别?
VFNCVT 从 2*SEW 源元素窄化到 SEW 目标元素;VFWCVT 从 SEW 源元素扩宽到 2*SEW 目标元素。二者方向相反,寄存器组大小和允许重叠规则也不同。
将 2*SEW 宽有符号整数源元素窄化转换为 SEW 浮点结果。
VFNCVT.F.X.W 读取 vs2 中 2*SEW 宽有符号整数元素,转换为 SEW 宽浮点结果并写入 vd。若目标浮点格式不能精确表示源整数,舍入由 frm 控制。
从 OP-V 编码解码到 VFUNARY0 窄化类型转换:每个活动元素把 vs2[i] 2*SEW 有符号整数转换为SEW浮点值。
lane 0: narrow_int_to_float(-8) -> -8
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
教学环境固定 VLEN=4096、LMUL=m1、SEW=32、vstart=0、合法 vtype、VS/FS 已启用和有效 frm。源组为偶数 vs2..vs2+1,目标为单个寄存器;重叠只能从源组最低编号寄存器开始,并强制 mask/tail agnostic。VL=0 时包括 tail 在内的目标元素均不更新。非活动和尾部不显示确定值;不展示完整 fflags。NaN、无穷和越界整数转换是模型范围之外的合法浮点输入,不表示非法指令。
这是 2*SEW 有符号整数到 SEW 浮点的窄化转换。
语法 vd, vs2[, v0.t];vs1=10011 是编码 selector,不是第二源。funct6=010010、funct3=001、opcode=1010111,指令长 32 位。
源 EEW=2*SEW、EMUL=2*LMUL;目标 EEW=SEW、EMUL=LMUL。组不超过 8 个寄存器并按组大小对齐。窄化重叠必须从相同最低编号寄存器开始,并强制 mask/tail agnostic。
可选 v0.t 对应 vm=0,省略为 vm=1。活动元素满足 vstart≤i<vl 且 mask 启用;masked vd 不得重叠 v0,源不能同时以数据 EEW 和 mask EEW=1 读取 v0。
prestart 不变;vl=0 或 vstart≥vl 时目标所有元素包括 tail 均不更新。其他非活动/尾元素遵循 vma/vta;成功执行重置 vstart=0。
整数源按 x/xu 解释为有符号/无符号,动态 frm 控制浮点舍入。本动画固定 RNE,64 位整数输入限于 ±(2^53−1) 内的可精确表示值;xu 不接受负整数。
V 支持 RV32/RV64 的此处 64→32 路径;SEW=16 本指令需要 Zvfh。教学环境固定合法 vtype、VS/FS 已启用与有效 frm;无效 frm 的使用保留,即使固定舍入或 vl=0。只有活动元素异常累积到 fflags;动画不展示完整 fflags。
假定 V/VS/FS 已启用、合法 vtype、有效 frm=RNE、e32,m1 可用、VLMAX≥4、x10=4;vsetvli 后 vl=4、vstart=0。源组为 v2/v3,示例省略 v0.t、未掩码:int64 v2=[16777217,-16777217,3,0] → binary32 v1=[16777216,-16777216,3,+0] (NX)。不精确转换累积 NX;tail 按 ta 处理,不假定清零。
假定 V/VS/FS 已启用、合法 vtype、有效 frm=RNE、e32,m1 可用、VLMAX≥4、x10=4;vsetvli 后 vl=4、vstart=0。源组为 v2/v3,示例省略 v0.t、未掩码:int64 v2=[16777217,-16777217,3,0] → binary32 v1=[16777216,-16777216,3,+0] (NX)。不精确转换累积 NX;tail 按 ta 处理,不假定清零。
VFNCVT 从 2*SEW 源元素窄化到 SEW 目标元素;VFWCVT 从 SEW 源元素扩宽到 2*SEW 目标元素。二者方向相反,寄存器组大小和允许重叠规则也不同。
不使用。VFNCVT 是浮点/整数转换族,普通形式使用浮点 frm,rtz 和 rod 是指令指定的固定舍入形式;vxrm 属于定点舍入指令。