Skip to content

Add MRET and WFI; fix bug in compressed branch/jump instruction emission#27

Merged
theandrew168 merged 2 commits intotheandrew168:masterfrom
Keybinder:master
Apr 11, 2026
Merged

Add MRET and WFI; fix bug in compressed branch/jump instruction emission#27
theandrew168 merged 2 commits intotheandrew168:masterfrom
Keybinder:master

Conversation

@Keybinder
Copy link
Copy Markdown
Contributor

This PR adds MRET and WFI instructions, which I believe should be implemented for any base ISA, since it's expected that all M-mode instructions are implemented. objdump disassembles both correctly when assembling with the new code.

Additionally, it fixes a bug where instructions like c.jal fn, c.bnez a0, label emit incorrect offsets, since the PC-relative handling that's done for the base branch/jump instructions wasn't done for the compressed ones. This wasn't caught by the C extension tests since they only test on constant immediates rather than labels in the context of a program. Full integration tests (i.e. assemble a more complex program that uses multiple extensions and check it matches a binary exactly) might be good.

P.S. It's a good assembler and I'm having fun using it.

@theandrew168
Copy link
Copy Markdown
Owner

theandrew168 commented Apr 11, 2026

Thanks for giving Bronzebeard a try and for opening this PR! I originally only implemented the unprivileged instructions but see value in also adding the privileged ones. I'm going to add a few more tests and then I'll get this merged.

EDIT: Actually, I'd like to add the rest of the privileged instructions so I'm going to merge this and add the rest (plus more tests) as a follow-up.

@theandrew168 theandrew168 merged commit 949cdbc into theandrew168:master Apr 11, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants