VMV.X.S 在 vl=0 时会执行吗?
会。官方规定 VMV.X.S 即使 vstart>=vl 或 vl=0 也执行,并从 vs2 的元素 0 传送数据。
把向量寄存器元素 0 移入整数寄存器 rd。
VMV.X.S 是 RISC-V V 扩展的向量到标量移动指令。它从 vs2 的元素 0 向整数寄存器 rd 传送一个整数位模式;它不是全向量广播或内存访问。
从 OP-V 字段解析开始,读取向量元素 0 并按 SEW/XLEN 规则写入整数寄存器。
固定 vm 与 vs1 字段仅在下方编码区显示,不是汇编语法操作数。
教学环境:VLEN=4096,支持所选 SEW;忽略 LMUL 和寄存器组。VMV.X.S 即使 vl=0 或 vstart>=vl 也执行。
OP-V 固定字段识别从 vs2 的元素 0 读取到整数 rd 的形式:vm=1、vs1=00000;vm=0 的 masked 编码保留。
VMV.X.S 只把 vs2 的元素 0 传送到整数 rd;它不广播、不访问内存,也不执行算术。若 rd=x0,传送结果被丢弃。
rd 为整数寄存器,vs2 为单个向量寄存器;忽略 LMUL。
32 位 OP-V,opcode=1010111、funct6=010000、funct3=010、vm=1;vs1=00000 为固定字段,没有 v0.t。
只读 vs2[0],SEW<XLEN 符号扩展,SEW>XLEN 取低 XLEN 位;vl=0 或 vstart≥vl 仍执行,rd=x0 丢弃写入。
要求 V 1.0、合法受支持 vtype、mstatus.VS 非 Off;H 且虚拟化 V=1 时 vsstatus.VS 也须非 Off。成功执行后 vstart 复位为0。
假定 V/VS 已启用、合法 m1、VLEN≥128、源已初始化、vstart=0;XLEN=64, e8, v8[0]=0x80, vl=0 → x10=0xffffffffffffff80。成功执行后 vstart=0。
假定 V/VS 已启用、合法 m1、VLEN≥128、源已初始化、vstart=0;XLEN=64, e8, v8[0]=0x80, vl=0 → x10=0xffffffffffffff80。成功执行后 vstart=0。
会。官方规定 VMV.X.S 即使 vstart>=vl 或 vl=0 也执行,并从 vs2 的元素 0 传送数据。