aboutsummaryrefslogtreecommitdiffstats
path: root/riscv.py
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2020-05-27 22:09:43 +0000
committers-ol <s-ol@users.noreply.github.com>2020-05-27 22:09:43 +0000
commit81de967626ef1d828389dead9545067409c83df9 (patch)
tree151a5b26ad2ab8616b5a92c8419d785980e2ad43 /riscv.py
parentoutput emulatable .elf (diff)
downloadsubv-81de967626ef1d828389dead9545067409c83df9.tar.gz
subv-81de967626ef1d828389dead9545067409c83df9.zip
implement u-format for JAL
Diffstat (limited to 'riscv.py')
-rw-r--r--riscv.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/riscv.py b/riscv.py
index b2af4cc..c0d5a15 100644
--- a/riscv.py
+++ b/riscv.py
@@ -29,3 +29,16 @@ def format_u(op, rd, imm20):
b2 = (imm20 >> 4) & 0xff
b3 = imm20 >> 12
return [(b0,), (b1,), (b2,), (b3,)]
+
+def format_j(op, rd, imm):
+ # opcode[7] rd[5] imm19:12[8] imm11[1] imm10:1[10] imm20[1]
+ imm12 = (imm >> 11) & 0xff
+ imm11 = (imm >> 12) & 0x1
+ imm1 = imm & 0x3ff
+ imm20 = imm >> 19
+
+ b0 = (rd & 0x1) << 7 | op # rd[1] op[7:0]
+ b1 = (imm12 & 0xf) << 4 | rd >> 1 # imm[15:12] rd[5:2]
+ b2 = (imm1 << 5) & 0xe0 | imm11 << 4 | (imm12 >> 4) # imm[3:1] imm[11] imm[19:16]
+ b3 = imm20 << 7 | imm1 >> 3
+ return [(b0,), (b1,), (b2,), (b3,)]