RV32A, RV64A Instructions

lr.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

00010

aq

rl

00000

rs1

010

rd

01011

11

Format
lr.w rd,rs1
Description
load a word from the address in rs1, places the sign-extended value in rd, and registers a reservation on the memory address.
Implementation
x[rd] = LoadReserved32(M[x[rs1]])

sc.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

00011

aq

rl

rs2

rs1

010

rd

01011

11

Format
sc.w rd,rs1,rs2
Description
write a word 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] = StoreConditional32(M[x[rs1]], x[rs2])

amoswap.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

00001

aq

rl

rs2

rs1

010

rd

01011

11

Format
amoswap.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, swap the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] SWAP x[rs2])

amoadd.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

00000

aq

rl

rs2

rs1

010

rd

01011

11

Format
amoadd.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply add the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] + x[rs2])

amoxor.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

00100

aq

rl

rs2

rs1

010

rd

01011

11

Format
amoxor.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply exclusive or the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] ^ x[rs2])

amoand.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

01100

aq

rl

rs2

rs1

010

rd

01011

11

Format
amoand.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply and the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] & x[rs2])

amoor.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

01000

aq

rl

rs2

rs1

010

rd

01011

11

Format
amoor.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply or the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] | x[rs2])

amomin.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

10000

aq

rl

rs2

rs1

010

rd

01011

11

Format
amomin.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply min operator the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] MIN x[rs2])

amomax.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

10100

aq

rl

rs2

rs1

010

rd

01011

11

Format
amomax.w rd,rs2,(rs1)
Description
atomically load a 32-bit signed data value from the address in rs1, place the value into register rd, apply max operator the loaded value and the original 32-bit signed value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] MAX x[rs2])

amominu.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

11000

aq

rl

rs2

rs1

010

rd

01011

11

Format
amominu.w rd,rs2,(rs1)
Description
atomically load a 32-bit unsigned data value from the address in rs1, place the value into register rd, apply unsigned min the loaded value and the original 32-bit unsigned value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] MINU x[rs2])

amomaxu.w

31-27

26

25

24-20

19-15

14-12

11-7

6-2

1-0

11100

aq

rl

rs2

rs1

010

rd

01011

11

Format
amomaxu.w rd,rs2,(rs1)
Description
atomically load a 32-bit unsigned data value from the address in rs1, place the value into register rd, apply unsigned max the loaded value and the original 32-bit unsigned value in rs2, then store the result back to the address in rs1.
Implementation
x[rd] = AMO32(M[x[rs1]] MAXU x[rs2])