VFIRST.M 找不到置位 bit 时返回什么?
返回 -1,写入整数寄存器 rd。
查找最低编号 active set mask bit 并写入整数 rd
VFIRST.M 在 vs2 源掩码中查找最低编号 active 且为 1 的元素,将该元素索引写入整数寄存器 rd;若没有找到则写入 -1。即使 vl=0,仍会写入 -1;若 vstart 非零,指令触发非法指令异常。
从 OP-V 编码字段开始,展示 VFIRST.M 如何寻找最低编号 active set bit;没有找到时写 -1。
教学模型固定 vstart=0。VFIRST.M 的 vstart 非零会触发非法指令异常;当 VL=0 时,正常路径仍向 rd 写入 -1。
vfirst.m 使用 OP-V 编码;vs1 字段固定为 10001,语法中没有 vs1 操作数。
动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、vl 内 active mask bit 扫描、整数 rd 写回;不模拟流水线、缓存或执行时延。
VFIRST.M 是 mask 到标量查找指令:结果是最低编号 active set bit 的元素索引,没找到时为 -1。
rd 是整数 x0–x31 或 ABI 名称;vs2 是单个掩码寄存器 v0–v31,每个元素对应一个 bit,与 SEW/LMUL 无关。
vm 在汇编中是可选的 v0.t;省略表示 vm=1。vm=0 时只有 v0[i]=1 的元素参与查找。
在 i<vl 的活动元素中查找 vs2[i]=1 的最低索引;无匹配(包括 vl=0)向 rd 写 -1。rd=x0 丢弃写回。
要求 V、向量状态已启用及有效向量配置;vstart 必须为 0,非零触发非法指令,陷阱报告 vstart=0。
假定 V/VS 已启用、e32,m1 可用、vstart=0、VLMAX≥4 且 a0=4,v8 按 lane 0..3 的位为 0101。示例未掩码,a1=1;若改用 v0.t 且 v0 位为 1011,则 a1=3;无活动置位或 vl=0 时为 -1。
假定 V/VS 已启用、e32,m1 可用、vstart=0、VLMAX≥4 且 a0=4,v8 按 lane 0..3 的位为 0101。示例未掩码,a1=1;若改用 v0.t 且 v0 位为 1011,则 a1=3;无活动置位或 vl=0 时为 -1。
返回 -1,写入整数寄存器 rd。
不会。vm=0 时 v0.t 为 0 的位置不参与扫描,即使 vs2 bit 为 1 也不能成为结果。