高通 Hexagon V65 HVX 编程参考手册(8)

高通 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)

编码

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38498942/article/details/129580019
今日推荐