3 ms·
The original Jonesforth is very cool, and I'm happy it's being ported to RISC-V. However, the in-code documentation[0] clearly has some errors due to blind fin
by KMag 6y ago
The original Jonesforth is very cool, and I'm happy it's being ported to RISC-V. However, the in-code documentation[0] clearly has some errors due to blind find-replace:
> On the right hand side I've written the actual RISC-V machine code.
... followed by a bunch of 5-byte x86 instructions (E8 followed by 4-byte addresses), and '"E8" is the x86 machine code to "CALL" a function'.
> On an RISC-V machine it turns out that we can write this interpreter rather easily, in just two assembly instructions which turn into just 3 bytes of machine code.
Uncompressed RISC-V instructions are 4 bytes. Compressed instructions are 2 bytes. Without some completely unanticipated extension that goes against the current design, there will be no way to make a 3-byte instruction sequence for RISC-V. From what I can tell, the actual RISC-V implementation is 4 instructions,
.macro NEXT
ld a0, 0(s1)
addi s1, s1, 8
ld t0, 0(a0)
jalr t0
.endm
taking 16 bytes on machines that don't support the compressed instructions extension. If all 4 can be compressed, that's still 8 bytes.
[0]https://github.com/jjyr/jonesforth_riscv/blob/master/jonesforth.S https://github.com/jjyr/jonesforth_riscv/blob/master/jonesfo...
- fwee 6y agoThanks for correcting. Compared to the original, the documentation is just replaced with some keywords. It needs more works to do to make it a useful tutorial.