vshr
功能说明
以block(32Byte) 为单位完成以下计算,一次完成8个block的计算。每个元素进行shrDistance位数的右移操作,其中int16和int32采用算术右移,uint16和uint32采用逻辑右移。int16和uint16类型要求shrDistance ≤ 16,int32和uint32类型要求shrDistance ≤ 32。
对于int16和int32类型语义如下:
if (round == 1) if (src_ele[i][shrDistance - 1] == 1) dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance) + 1 else dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance) else: dst_ele[i] = arithmetic_right_shift(src_ele[i], shrDistance)
对于uint16和uint32类型,round不生效,语义如下:
dst_ele[i] = logic_right_shift(src_ele[i], shrDistance)
函数原型
void vshr(__ubuf__ int16_t *dst, __ubuf__ int16_t *src, int32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ int32_t *dst, __ubuf__ int32_t *src, int32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ uint16_t *dst, __ubuf__ uint16_t *src, uint32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round); void vshr(__ubuf__ uint32_t *dst, __ubuf__ uint32_t *src, uint32_t shrDistance, uint8_t repeat, uint16_t dstBlockStride, uint16_t srcBlockStride, uint16_t dstRepeatStride, uint16_t srcRepeatStride, bool round);
流水类型
PIPE_V
父主题: 双目运算