在RVV1.0指令函数的使用中,遇到了mask加载不匹配问题
uint8_t mask_data[] = {15, 0, 0, 0, 0, 0, 0, 0};
vbool8_t mask = vlm_v_b8(mask_data, vl);
printf("mask:\n");
for(int i=0; i<vl; i++)
{
printf("%d ", mask_data[i]);
}
printf("\n");
// exam mask
uint8_t mask_e[8];
vsm_v_b8(mask_e, mask, vl);
printf("mask_e:\n");
for(int i=0; i<vl; i++)
{
printf("%d ", mask_e[i]);
}
printf("\n");
即在这段代码中,由mask_data转换为mask过程中,出现应用时不匹配问题,这里mask_data的元素15,0,0,0,0,0,0,0;实际上不会这么写入mask中。
那么,它是怎么应用的呢;
15 = 0000 1111
将15转化为二进制,在实际计算中,mask被赋值为1111 0000.
那么得出结论,转换规则为:
- 将mask_data数组下标为0处表示掩码,其余位置置0
- 首元素的设置为:哪一位参与运算位置为0,不参与计算则置为1,这样得到的二进制转换为十进制数。
- maskedoff遵循原顺序即可。