gpt4 book ai didi

riscv - 向 RISCV-32ima : "bad RISCV-opcode" 添加新指令

转载 作者:行者123 更新时间:2023-12-04 05:03:57 26 4
gpt4 key购买 nike

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

全局设置

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

  • riscv-fesvr
  • riscv-gnu-工具链
  • riscv-isa-sim
  • riscv 操作码
  • riscv-pk

  • 注意:我克隆的最后一次提交是 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
  • 现在,我添加必要的 stuctsriscv-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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com