RVV1.0指令中关于_m系列函数的使用方法,即掩码mask的转换使用

在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.

那么得出结论,转换规则为:

  1. 将mask_data数组下标为0处表示掩码,其余位置置0
  2. 首元素的设置为:哪一位参与运算位置为0,不参与计算则置为1,这样得到的二进制转换为十进制数。
  3. maskedoff遵循原顺序即可。