我正在寻求有关尝试添加到riscv的扩展的帮助。

全局设置

我的工作基准是 riscv-tools repo的克隆,其中包含常用工具,其中包括:

  • riscv-fesvr
  • riscv-gnu-toolchain
  • riscv-isa-sim
  • riscv-操作码
  • riscv-pk

  • nb:我从中克隆的最后一个提交是c6d58cecb3862deb742e1a5cc9d1c682f2c50ba9(2018-04-24)。

    我的工作基于riscv32-ima核心。我想向该处理器的ISA添加一条指令,以激活处理器中的特定组件。

    从proc本身的行为来看,我没有问题:我修改了峰值,并且我的指令(以及添加到处理器中的组件)运行得很好。

    在汇编器中,指令如下所示:
    addi a0, a0, 0
    ...            // other code
    setupcomp      // activate my component ...
    ...            // other code
    

    看到该指令没有任何操作数。

    我做的事情

    我躲开了一段时间,发现了this tutorial,它有点旧了。

    所以我:
  • 转到riscv-tools/riscv-opcodes/
  • opcode及其掩码添加到riscv-tools/riscv-opcodes/opcodes中。我的看起来像这样:
    setupcomp 31..28=ignore 27..20=ignore 19..15=ignore 14..12=0 11..7=ignore 6..2=0x1a 1..0=3
    
  • 从那里
  • ,我重建必要的.h文件:
    make install
    
  • 现在,我在stucts中添加了必要的riscv-tools/riscv-gnu-toolchain/riscv-binutils-gdb/include/opcode/riscv-opc.h,并正式声明了该指令:
    #define MATCH_SETUPCOMP 0x6b
    #define MASK_SETUPCOMP  0x707f
    DECLARE_INSN(setupcomp, MATCH_SETUPCOMP, MASK_SETUPCOMP)
    

    这些值是我从操作码项目中生成的。
  • 我还将必要的定义添加到:riscv-tools/riscv-gnu-toolchain/riscv-binutils-gdb/opcodes/riscv-opc.c:
    {"setupcomp", "I", "", MATCH_SETUPCOMP, MASK_SETUPCOMP, match_opcode, 0 },
    

  • 现在,到这里为止,我相信我已经做了所有必要的事情。我仍然对我想要的操作码有疑问,但是我不认为这会对我观察到的行为和我现在描述的行为产生影响。

    我遇到的问题

    当我使用riscv-tools/build-rv32ima.sh script构建所有内容时,在过程即将结束时(我相信测试套件之类的东西),我收到一条消息,提示:
    Assembler messages:
    Error: internal: bad RISC-V opcode (bits 0xffffffffffff8f80 undefined): setupcomp
    Fatal error: Broken assembler.  No assembly attempted.
    make[6]: *** [lib_a-dummy.o] Error 1
    

    我认为我在指令的声明中缺少某些内容,可能是该声明未正确“转发”到实际需要它的工具链的每个部分。
    但是我找不到哪里/什么/如何/何时,对此我将不胜感激。

    当然,我很可能会遗漏一些明显的东西,所以要格外温柔:)

    最佳答案

    向工具链中添加自定义指令的最佳选择是使用我们的.insn汇编程序指令。虽然这没有给您漂亮的语法(应该使用预处理器宏或C包装函数),但确实可以避免接触到很多问题的工具链。

    最好的文档是the GAS testsuite for .insn 。基本上,用户可以发出RISC-V ISA手册定义的任何格式的指令,并带有直接填写每个位模式的选项。它与GCC的内联汇编寄存器分配框架完全集成在一起,与其他任何指令一样工作。

    关于riscv - 向RISCV-32ima添加新指令: "bad RISCV-opcode",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51825942/

    10-12 13:13