明天可能需要开同步会议,今天先总结一下近日工作。另外的考量是确实有点摸不着头脑自己在干啥了。一种没有清晰把握脉络的焦虑感促使我写这篇记录。

按照时间顺序

首先肯定是发现了 riscv-vector-fuzzing-test 这个项目里面在使用 /include/CustomOperator.def 当所有需要处理的指令合集。
问题在于出现了生成的intrinsic function参数个数不对,进行同步发现 rvv 1.0 spec可能需要使用 sifive-intrinsic-doc 这个项目中生成的 rif.def 文件。
直接把 rif.def 修改为 CustomOperator.def 使用会出现以下问题:

  1. SizePtr, NeedMerge, Void 这些属性无法识别。
    暂时用移除 vleff, vslideup, vsm 等指令来解决。
  2. riscv-vector-fuzzing-testscript/GenerateOperatorComputeHeaders.py 无法识别 op id
    暂时移除 vcreate, veget, vlm, vlmul_trunc, vlmul_ext, vreinterpret, vsetvlmax, vsetvl, vundefined, vlse 等指令来解决。
  3. 生成的 \include\autogen\compute{op_type}.h 中 include 的 spike 或者本地头文件名不对。
    在 script/* 中加入判断 op_id 进行了修复。比如 vfmv_v_f, vfmv_f_s。
  4. 尚未找出 CustomOperator.def 中为何会如此生成。比如compress_vv, spec 中是 compress_vm。 暂时移除 compress_vv 解决。
    当以上 CustomOperator.def 的问题大部分用跳过的方式解决之后,出现了 mask 指令在 \include\autogen\compute{op_type}.h 声明的变量数量不一致的问题。 解决方式是在 script\*Literal.py 中的 create_*_op 函数,加入判断,如果是 mask function 之后加入一个 input 作为 mask function 默认的 vd 值。并修改了 *_literal_mask_body 中的参数。
    随后出现了有 rounding mode 的指令参数不正确的问题。
    解决方式是在 script\*Literal.py 加入如果 input_type 中有 “SclarUIntXLen” 就使用新增的包含 rounding mode 的 _frm_body。
    但是使用 “SclarUIntXLen” 是根据观察决定的,导致了包含该 input type 但没有 rounding mode 的 shift 指令生成错误。所以判断条件变为 elif "ScalarUIntXLen" in input_types and op_id not in ['nsra_wx','nsrl_wx','sll_vx','sra_vx','srl_vx']。 可能有待改进。
    以上问题解决完毕之后,出现了 /test/test*.cpp 的参数没有定义的问题,根据该参数为 op_type 将所有文件按照 CustomOperator.def 修改完毕解决了没有定义问题,但是 testPolicy.cpp 中带有 TA, TU, TAMA, TAMU, TUMA, TUMU 后缀的参数确实不知道在哪里找。
    可以确定是只是 rvv 1.0 中对 tail policy 的内容进行了修改,这部分肯定是需要修的。
    接下来有靠谱的方法,理解 test\test
    .cpp 从何而来,为何要写并改写。
    不靠谱的方法,删掉 testPolicy.cpp。因为生成脚本中很多有ta相关内容我也并未修复。
    先去修了,小结就到这里。