高通 Hexagon V65 HVX 编程参考手册(8)
5.2 hvx/alu-双资源
HVX/ALU-双资源指令子类包括使用一对HVX资源的ALU指令
预测操作
在两个向量谓词寄存器Qs和Qt之间执行位逻辑操作,并将结果放在Qd中。这些操作与元素大小无关。
实现了以下组合: Qs & Qt、Qs &!Qt, Qs | Qt, Qs | !Qt, Qs ^ Qt.从两个向量中交错谓词位,以匹配像vsat或vround这样的洗牌操作。可以使用匹配字对半字和半字到字节的变换的格式。
Class: COPROC_VX (slots 0,1,2,3)
备注:
此指令使用任意一对HVX资源(包括相乘或移位/排列)。
内部的
Qd4.b=vshuffe(Qs4.h,Qt4.h) | HVX_VectorPred Q6_Qb_vshuffe_QhQh(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4.h=vshuffe(Qs4.w,Qt4.w) | HVX_VectorPred Q6_Qh_vshuffe_QwQw(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4=and(Qs4,!Qt4) | HVX_VectorPred Q6_Q_and_QQn(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4=and(Qs4,Qt4) | HVX_VectorPred Q6_Q_and_QQ(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4=or(Qs4,!Qt4) | HVX_VectorPred Q6_Q_or_QQn(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4=or(Qs4,Qt4) | HVX_VectorPred Q6_Q_or_QQ(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Qd4=xor(Qs4,Qt4) | HVX_VectorPred Q6_Q_xor_QQ(HVX_VectorPred Qs, HVX_VectorPred Qt) |
Encoding
组合
将两个输入向量寄存器组合成单个目标向量寄存器对。
使用标量谓词,有条件地将单个向量寄存器复制到目标向量寄存器中,或者有条件地将两个输入向量合并到目标向量寄存器对中。一个标量谓词保护着整个操作。如果标量谓词为真,则执行该操作。否则,该指令将被视为NOP。
Class: COPROC_VX (slots 0,1,2,3)
注意:
■ 此指令使用任何一对HVX资源(包括乘法或移位/排列)。
内部的
Vdd=vcombine(Vu,Vv) HVX_VectorPair Q6_W_vcombine_VV(HVX_Vector Vu, HVX_Vector Vv)
编码
车道内拖动
vshupoe同时执行和和运算,偶数元素放置在Vdd的偶数向量寄存器中,奇数元素放置在目标向量对的奇数向量寄存器中
Class: COPROC_VX (slots 0,1,2,3)
注意:
■ 此指令使用任何一对HVX资源(包括乘法或移位/排列)。
内部的
Vdd.b=vshuffoe(Vu.b,Vv.b) | HVX_VectorPair Q6_Wb_vshuffoe_VbVb(HVX_Vector Vu, HVX_Vector Vv) |
Vdd.h=vshuffoe(Vu.h,Vv.h) | HVX_VectorPair Q6_Wh_vshuffoe_VhVh(HVX_Vector Vu, HVX_Vector Vv) |
交换
基于向量谓词寄存器中的谓词位,如果设置该位,则将向量寄存器的相应字节放置在Vdd的偶数目标向量寄存器中,将Vv的字节放置在Vdd的偶数目标向量寄存器中。否则,将Vv中对应的字节写入偶数寄存器,将Vu写入奇数寄存器。该操作可以使用字节进行工作,因此它可以处理所有的数据大小。它类似于vmux操作,但将相反的情况输出放到目标向量寄存器对的奇数向量寄存器中。
Class: COPROC_VX (slots 0,1,2,3)
注意:
■ 此指令使用任何一对HVX资源(包括乘法或移位/排列)。
内部的
编码
标志/零扩展
对Vu中的每个偶数元素进行符号扩展,并将其放在偶数目标向量寄存器Vdd[0]中。奇数元素被符号扩展,并放置在奇数目标向量寄存器Vdd[1]中。字节被转换为半字,半字被转换为单词。
单词的符号扩展是一种交叉车道操作,只能在排列槽上执行。
对Vu中的每个偶数元素执行零扩展,并将其放在偶数目标向量寄存器Vdd[0]中。奇元素被零扩展,并放置在奇目标向量寄存器Vdd[1]中。字节被转换为半字,半字被转换为单词。
单词的零扩展是一个交叉车道操作,只能在排列槽上执行。
Class: COPROC_VX (slots 0,1,2,3)
注意:
■ 此指令使用任何一对HVX资源(包括乘法或移位/排列)
内部的
Vdd.h=vsxt(Vu.b) | HVX_VectorPair Q6_Wh_vsxt_Vb(HVX_Vector Vu) |
Vdd.uh=vzxt(Vu.ub) | HVX_VectorPair Q6_Wuh_vzxt_Vub(HVX_Vector Vu) |
Vdd.uw=vzxt(Vu.uh) | HVX_VectorPair Q6_Wuw_vzxt_Vuh(HVX_Vector Vu) |
Vdd.w=vsxt(Vu.h) | HVX_VectorPair Q6_Ww_vsxt_Vh(HVX_Vector Vu) |
编码
算术运算
在两个向量Vu和Vv的元素之间执行简单的算术运算,加减。支持字、半字(有符号和无符号)和字节(有符号和无符号)。可选择饱和的单词和半字。对于无符号类型,总是保持饱和。
Class: COPROC_VX (slots 0,1,2,3)
注意:
■ 此指令使用任何一对HVX资源(包括乘法或移位/排列)。
内部的
Vdd.b=vadd(Vuu.b,Vvv.b) | HVX_VectorPair Q6_Wb_vadd_WbWb(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.b=vadd(Vuu.b,Vvv.b):sat |HVX_VectorPair Q6_Wb_vadd_WbWb_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.b=vsub(Vuu.b,Vvv.b) |HVX_VectorPair Q6_Wb_vsub_WbWb(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.b=vsub(Vuu.b,Vvv.b):sat |HVX_VectorPair Q6_Wb_vsub_WbWb_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.h=vadd(Vuu.h,Vvv.h) | HVX_VectorPair Q6_Wh_vadd_WhWh(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.h=vadd(Vuu.h,Vvv.h):sat | HVX_VectorPair Q6_Wh_vadd_WhWh_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.h=vsub(Vuu.h,Vvv.h) | HVX_VectorPair Q6_Wh_vsub_WhWh(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.h=vsub(Vuu.h,Vvv.h):sat | HVX_VectorPair Q6_Wh_vsub_WhWh_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.ub=vadd(Vuu.ub,Vvv.ub):sat | HVX_VectorPair Q6_Wub_vadd_WubWub_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.ub=vsub(Vuu.ub,Vvv.ub):sat | HVX_VectorPair Q6_Wub_vsub_WubWub_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.uh=vadd(Vuu.uh,Vvv.uh):sat | HVX_VectorPair Q6_Wuh_vadd_WuhWuh_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.uh=vsub(Vuu.uh,Vvv.uh):sat | HVX_VectorPair Q6_Wuh_vsub_WuhWuh_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.uw=vadd(Vuu.uw,Vvv.uw):sat | HVX_VectorPair Q6_Wuw_vadd_WuwWuw_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.uw=vsub(Vuu.uw,Vvv.uw):sat |HVX_VectorPair Q6_Wuw_vsub_WuwWuw_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.w=vadd(Vuu.w,Vvv.w) |HVX_VectorPair Q6_Ww_vadd_WwWw(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.w=vadd(Vuu.w,Vvv.w):sat | HVX_VectorPair Q6_Ww_vadd_WwWw_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.w=vsub(Vuu.w,Vvv.w) | HVX_VectorPair Q6_Ww_vsub_WwWw(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
Vdd.w=vsub(Vuu.w,Vvv.w):sat | HVX_VectorPair Q6_Ww_vsub_WwWw_sat(HVX_VectorPair Vuu, HVX_VectorPair Vvv)
编码