B.NE¶
说明¶
不等时跳转(Branch if Not Equal)
如果左源操作数与右源操作数不相等,跳转到当前TPC加上左移一位的立即数偏移指示的目标地址处;否则,顺序执行。
汇编语法¶
汇编符号¶
- SrcL:左源寄存器,可以索引全局寄存器R0-R23和前序1-4条输出至T队列或U队列的指令结果。
- SrcR:右源寄存器,可以索引全局寄存器R0-R23和前序1-4条输出至T队列或U队列的指令结果。
- label:表示条件跳转目标位置的程序标签。它相对于本指令TPC的偏移距离除以2后编码在simm12字段。
编码格式¶
执行方式¶
- 转换为十进制数:UInt()
- 通用寄存器读写:R[]
- 对数据符号扩展:SignExtend()
integer m = UInt(SrcL);
integer n = UInt(SrcR);
bits(64) operand1 = R[m, 64];
bits(64) operand2 = R[n, 64];
bits(64) simm = SignExtend(simm12);
bits(64) offset = simm << 1;
TPC += (operand1 != operand2 ? offset : 4);
汇编索引模式¶
b.ne a1, a2, label /* 双寄存器绝对索引 */
b.ne a1, t#2, label /* 双寄存器混合索引 */
b.ne a1, u#2, label /* 双寄存器混合索引 */
b.ne t#1, a2, label /* 双寄存器混合索引 */
b.ne t#1, t#2, label /* 双寄存器相对索引 */
b.ne t#1, u#2, label /* 双寄存器相对索引 */
b.ne u#1, a2, label /* 双寄存器混合索引 */
b.ne u#1, t#2, label /* 双寄存器相对索引 */
b.ne u#1, u#2, label /* 双寄存器相对索引 */
注意事项¶
本指令不占块内私有寄存器槽位。
备注¶
本指令属于基础指令集,可用于向量Tile块、并行Tile块和访存Tile块的块体中。