diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-05-27 22:09:43 +0000 |
|---|---|---|
| committer | s-ol <s-ol@users.noreply.github.com> | 2020-05-27 22:09:43 +0000 |
| commit | 81de967626ef1d828389dead9545067409c83df9 (patch) | |
| tree | 151a5b26ad2ab8616b5a92c8419d785980e2ad43 /riscv.py | |
| parent | output emulatable .elf (diff) | |
| download | subv-81de967626ef1d828389dead9545067409c83df9.tar.gz subv-81de967626ef1d828389dead9545067409c83df9.zip | |
implement u-format for JAL
Diffstat (limited to 'riscv.py')
| -rw-r--r-- | riscv.py | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -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,)] |
