Minimal test case:
This assembles to:
Address Code Basic Source
0x00000000 0x004000ef jal x1,0x00000002 1 jal x1 l1
0x00000004 0x00000013 addi x0,x0,0x00000000 3 nop
(This is compact .text at 0, but it doesn't matter since JAL is relative)
However, according to the spec on page 16, the low order bit of the immediate value is placed at index 21. This would imply the instruction should be encoded as 0x002000ef -- noting that 0x002000ef & (1 << 21) >> 21 = 1. Also note that JAL technically has a 21-bit immediate, but the lowest order bit is omitted as described on page 15, thus a a relative jump to PC+2 should have a single 1 in the lowest order bit of the immediate.
Minimal test case:
This assembles to:
(This is compact
.textat 0, but it doesn't matter sinceJALis relative)However, according to the spec on page 16, the low order bit of the immediate value is placed at index 21. This would imply the instruction should be encoded as
0x002000ef-- noting that0x002000ef & (1 << 21) >> 21 = 1. Also note that JAL technically has a 21-bit immediate, but the lowest order bit is omitted as described on page 15, thus a a relative jump toPC+2should have a single1in the lowest order bit of the immediate.