RV64A Instructions
lr.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
00010 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- lr.d rd,rs1
- Description
- load a 64-bit data from the address in rs1, places value in rd, and registers a reservation on the memory address.
- Implementation
- x[rd] = LoadReserved64(M[x[rs1]])
sc.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
00011 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- sc.d rd,rs1,rs2
- Description
- write a 64-bit data in rs2 to the address in rs1, provided a valid reservation still exists on that address.SC writes zero to rd on success or a nonzero code on failure.
- Implementation
- x[rd] = StoreConditional64(M[x[rs1]], x[rs2])
amoswap.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
00001 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amoswap.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, swap the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] SWAP x[rs2])
amoadd.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
00000 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amoadd.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply add the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] + x[rs2])
amoxor.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
00100 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amoxor.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply xor the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] ^ x[rs2])
amoand.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
01100 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amoand.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply and the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] & x[rs2])
amoor.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
01000 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amoor.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply or the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] | x[rs2])
amomin.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
10000 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amomin.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply min the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] MIN x[rs2])
amomax.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
10100 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amomax.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply max the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] MAX x[rs2])
amominu.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
11000 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amominu.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply unsigned min the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] MINU x[rs2])
amomaxu.d
31-27 |
26 |
25 |
24-20 |
19-15 |
14-12 |
11-7 |
6-2 |
1-0 |
11100 |
aq |
rl |
rs2 |
rs1 |
011 |
rd |
01011 |
11 |
- Format
- amomaxu.d rd,rs2,(rs1)
- Description
- atomically load a 64-bit data value from the address in rs1, place the value into register rd, apply unsigned max the loaded value and the original 64-bit value in rs2, then store the result back to the address in rs1.
- Implementation
- x[rd] = AMO64(M[x[rs1]] MAXU x[rs2])