0%

riscv V扩展编程笔记

基于riscv_vector.h,抄的https://www.bilibili.com/video/BV1VT411E7iQ

Vector寄存器长度是厂商可选的。可以是64, 128, ..., 2048bits。

寄存器数据类型:v<type><len><group>_t. e.g. vfloat32m1_t。group代表几个寄存器拼成一组,最大八个。下文用reg_type指代。

uint vsetvlmax_e<len><group>(): 返回寄存器最大能操作多少个len bit的元素。如vsetvlmax_e32m1()

reg_type vfmv_v_f_f32m1(f, vl):返回一个每个元素初始化为f的reg_type。vl代表寄存器操作几个数,0 <= vl <= vlmax。f32m1对应vfloat32m1_t_v_f见下: 1. v:向量寄存器 2. f:浮点数寄存器 3. i:立即数 4. x:普通寄存器 5. s:向量寄存器的第0位(标量寄存器)

reg_type vle32_v_f32m1(addr, vl):从addr开始读取vl个数据。f32m1同上。这条是连续访存,还有固定间隔跳跃访存和index间接访存。

reg_type vfadd_vv_f32m1(op1, op2, vl):op1和op2相加。还有标量形式的reg_type vfadd_vf_f32m1(reg_type op1, float op2, vl)

reg_type vfredusum_vs_f32m1_f32m1(vd, vv, vs, vl):等同于vd[0] = (((vs[0] + vv[0]) + vv[1]) + ...) + vv[vl-1]。返回vd。

有一个mask类型,可以指定向量寄存器哪几位不更新。分支的时候用。