我正在寻求有关我尝试添加的扩展的帮助 riscv。
我的工作基线是riscv-toolsrepo的克隆,包含常用工具,其中包括:
注意:我克隆的最后一次提交是c6d58cecb3862deb742e1a5cc9d1c682f2c50ba9(2018-04-24)。
我的工作基于一个riscv32-ima核心。我想向该处理器添加一条指令,该指令ISA将激活我的处理器中的特定组件。
从 proc 本身的行为来看,我没有问题:我修改了尖峰并且我的指令(以及我添加到处理器的组件)工作得很好。
在汇编程序中,指令如下所示:
addi a0, a0, 0
... // other code
setupcomp // activate my component ...
... // other code
Run Code Online (Sandbox Code Playgroud)
看到这条指令没有任何操作数。
我躲了一会儿,发现这个教程有点旧。
所以我:
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
Run Code Online (Sandbox Code Playgroud)从那里,我重建必要的.h文件:
make install
Run Code Online (Sandbox Code Playgroud)现在,我将必要的添加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)
Run Code Online (Sandbox Code Playgroud)
这些值是我从操作码项目生成的值中获得的。
我还将必要的定义添加到
riscv-tools/riscv-gnu-toolchain/riscv-binutils-gdb/opcodes/riscv-opc.c:
{"setupcomp", "I", "", MATCH_SETUPCOMP, MASK_SETUPCOMP, match_opcode, 0 },
Run Code Online (Sandbox Code Playgroud)现在,到这里为止,我相信我已经做了所有必要的事情。我仍然对我想要的操作码有疑问,但我认为这不会影响我观察到的行为以及我现在描述的行为。
当我用 构建所有东西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
Run Code Online (Sandbox Code Playgroud)
我想我在指令的声明中遗漏了一些东西,可能是这个声明没有正确地“转发”到实际需要它的工具链的每个部分。但我找不到在哪里/什么/如何/何时,我将非常感谢您对此的任何意见。
当然,我很可能遗漏了一些明显的东西,所以要温柔:)
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |