1、vdd.h = vsxt(Vu.b) 对每个元素进行符号扩展
vdd.h = vzxt(Vu.b) 对每个元素进行补0扩展
需要注意是交叉来做的
Intrinsics
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)
2、矢量指令一般是将矢量寄存器中的每个 element 公平对待,并行处理,比较少将整个矢量寄存器中的bit位当作一个整体来处理,但是我们有时候又有这样的需求,比如求一个矢量寄存器中的最大最小值,对整个矢量寄存器进行整体移位(valign 最多移 7 个 Bytes)等。而用下面的两条指令组合起来可以实现任意字节的矢量寄存器拼接:
Vd = vror(Vu, Rt)
Vd = vmux(Qt4, Vu, Vv)
网友评论