Closed jaxvanyang closed 1 year ago
另外我想问下有没有比较容易解析的官方操作码文档,因为我想给 Compiler Explorer 加上操作码帮助信息^1,但苦于没有一个稳定的 source。也可以给你们完善 YAML,但是我现在项目都跑不起来……
已经了解该问题,正在尝试复现
问题已解决,最新代码运行 npm run build
会输出如下警告:
Invalid range S13 in BEQ/imm
given range is: S13, 31, 7, 25:30, 8:11, $0
Skipping ...
Invalid range $0 in BEQ/imm
given range is: S13, 31, 7, 25:30, 8:11, $0
Skipping ...
上述错误依然会导致BEQ解析不正确,但是不再会导致build崩溃。
原代码没有检查上述情况,导致parseInt
输出的NaN
进入循环,造成无限执行Array.push()
并最终导致数组越界,触发node internal error。
另外我想问下有没有比较容易解析的官方操作码文档,因为我想给 Compiler Explorer 加上操作码帮助信息1,但苦于没有一个稳定的 source。也可以给你们完善 YAML,但是我现在项目都跑不起来……
Footnotes
目前我计划采用RISC-V官方的结构化数据 riscv-opcodes 重构项目,但是会有如下几个问题:
JsEMU
的解码器,并且计划日后进一步完善拓展成为一个能够提供图形化difftest功能的框架。因此,还需要可靠的指令行为描述模型。目前看来比较可行的方法是实现一个DSL解析器,并采用现有的DSL仓库作为数据源(例如 CoreDSL).我计划于近期开始对该项目进行一次重构升级,希望尽量多地从社区获取帮助。如果你有兴趣参与开发维护的话,欢迎联系我进一步讨论。
我计划于近期开始对该项目进行一次重构升级,希望尽量多地从社区获取帮助。如果你有兴趣参与开发维护的话,欢迎联系我进一步讨论。
非常乐意,但我只是 RISC-V 的初学者,给 CE 加 help message 也只是想顺便学习一下指令集,专业的工作可能无法胜任,但我会尽量提供帮助。 重构的话我有一些想法可以讨论一下:
分yml
和md
两部分是为了分开machine readable部分和human readable。
分
yml
和md
两部分是为了分开machine readable部分和human readable。
也许可以用 machine readable 的 YAML 生成 human readable 的内容?因为就我目前来看,将现有 MD 中的内容加到 YAML 里貌似不是很难,例如:
---
opcode:
name: ADDI
mask: '-----------------000-----0010011'
args:
rs1: 19:15
rd: 11:7
imm: 31:20
exec:
rd: "rs1 + imm"
meta:
encoding: I
importance: 0
description:
locale:
en:
title: Add Immediate
...
zh:
title: 加立即数
...
all:
hint:
title: `NOP` Pseudo Instruction
content: |
`NOP`s can be used to align...
`ADDI` was chosen...
---
# other opcodes
麻烦的是需要重写 MD to HTML 的逻辑,但是可以方便其他用途的解析,比如我前面提到的 CE。
现在可以成功 build decoder,但是预览网页报找不到文件的错,full log:https://pastebin.com/HUXgZYNt
现在可以成功 build decoder,但是预览网页报找不到文件的错,full log:https://pastebin.com/HUXgZYNt
git submodule init && git submodule update
git submodule init && git submodule update
ok 了,没注意到还有 submodule。
On ArchWSL, with Node.js 20.5.0 and npm 9.8.1. Install:
Build:
另外我试了 Node.js 16、18,也是类似的错误,感觉很奇怪。