I write C style pseudo codes to explain what does every single RV64I instruction do(not include privileged instructions). rm register for medium operations.
add rd, rs1, rs2
rd = rs1 + rs2;
pc = pc + 4;addw rd, rs1, rs2
rd = rs1 + rs2;
rd = extend_signed_32bit(rd);
pc = pc + 4;addi rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 + rd;
pc = pc + 4;addiw rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 + rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;auipc rd, IMMEDIATE_UPPER
rd = IMMEDIATE_UPPER;
rd = rd << 20;
rd = extend_signed_32bit(rd);
rd = pc + rd;
pc = pc + 4;sub rd, rs1, rs2
rd = rs1 - rs2;
pc = pc + 4;subw rd, rs1, rs2
rd = rs1 - rs2;
rd = extend_signed_32bit(rd);
pc = pc + 4;srl rd, rs1, rs2
rd = rs2 & 63;
rd = (uint64_t)rs1 >> rd;
pc = oc + 4;srlw rd, rs1, rs2
rd = rs2 & 31;
rd = (uint64_t)rs1 >> rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;srli rd, rs1, IMMEDIATE_SHIFTAMOUNT63
rd = extend_unsigned_6bit(IMMEDIATE_SHIFTAMOUNT63);
rd = (uint64_t)rs1 >> rd;
pc = pc + 4;srliw rd, rs1, IMMEDIATE_SHIFTAMOUNT31
rd = extend_unsigned_5bit(IMMEDIATE_SHIFTAMOUNT31);
rd = (uint64_t)rs1 >> rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;sll rd, rs1, rs2
rd = rs2 & 63;
rd = rs1 << rd;
pc = oc + 4;sllw rd, rs1, rs2
rd = rs2 & 31;
rd = rs1 << rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;slli rd, rs1, IMMEDIATE_SHIFTAMOUNT63
rd = extend_unsigned_6bit(IMMEDIATE_SHIFTAMOUNT63);
rd = rs1 << rd;
pc = pc + 4;slliw rd, rs1, IMMEDIATE_SHIFTAMOUNT31
rd = extend_unsigned_5bit(IMMEDIATE_SHIFTAMOUNT31);
rd = rs1 << rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;sra rd, rs1, rs2
rd = rs2 & 63;
rd = rs1 >> rd;
pc = pc + 4;sraw rd, rs1, rs2
rd = rs2 & 31;
rd = rs1 >> rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;srai rd, rs1, IMMEDIATE_SHIFTAMOUNT63
rd = extend_unsigned_6bit(IMMEDIATE_SHIFTAMOUNT63);
rd = rs1 >> rd;
pc = pc + 4;sraiw rd, rs1, IMMEDIATE_SHIFTAMOUNT31
rd = extend_unsigned_5bit(IMMEDIATE_SHIFTAMOUNT31);
rd = rs1 >> rd;
rd = extend_signed_32bit(rd);
pc = pc + 4;and rd, rs1, rs2
rd = rs1 & rs2;
pc = pc + 4;andi rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 & rd;
pc = pc + 4;or rd, rs1, rs2
rd = rs1 | rs2;
pc = pc + 4;ori rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 | rd;
pc = pc + 4;xor rd, rs1, rs2
rd = rs1 ^ rs2;
pc = pc + 4;xori rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 ^ rd;
pc = pc + 4;slt rd, rs1, rs2
rd = rs1 < rs2;
pc = pc + 4;sltu rd, rs1, rs2
rd = (uint64_t)rs1 < (uint64_t)rs2;
pc = pc + 4;slti rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = rs1 < rd;
pc = pc + 4;sltiu rd, rs1, IMMEDIATE
rd = extend_signed_12bit(IMMEDIATE);
rd = (uint64_t)rs1 < (uint64_t)rd;
pc = pc + 4;beq rs1, rs2, IMMEDIATE_BRANCH
rm1 = rs1 == rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;bne rs1, rs2, IMMEDIATE_BRANCH
rm1 = rs1 != rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;blt rs1, rs2, IMMEDIATE_BRANCH
rm1 = rs1 < rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;bltu rs1, rs2, IMMEDIATE_BRANCH
rm1 = (uint64_t)rs1 < (uint64_t)rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;bge rs1, rs2, IMMEDIATE_BRANCH
rm1 = rs1 >= rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;bgeu rs1, rs2, IMMEDIATE_BRANCH
rm1 = (uint64_t)rs1 >= (uint64_t)rs2;
rm1 = -rm1;
rm2 = IMMEDIATE_BRANCH_OFFSET;
rm2 = rm2 << 1;
rm2 = extend_signed_13bit(rm2);
rm2 = rm2 - 4;
rm2 = rm2 & rm1;
rm2 = rm2 + 4;
pc = pc + rm2;jal rd, IMMEDIATE_JUMP
rd = pc + 4;
rm1 = IMMEDIATE_JUMP_OFFSET;
rm1 = rm1 << 1;
rm1 = extend_signed_21bit(rm1);
pc = pc + rm1;jalr rd, rs1, IMMEDIATE
rd = pc + 4;
rm1 = extend_signed_12bit(IMMEDIATE);
pc = rs1 + rm1;
pc = pc & -2;lb rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(int8_t*)rs1;lbu rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(uint8_t*)rs1;lh rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(int16_t*)rs1;lhu rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(uint16_t*)rs1;lw rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(int32_t*)rs1;lwu rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(uint32_t*)rs1;ld rd, IMMEDIATE(rs1)
rd = extend_signed_12bit(IMMEDIATE);
rs1 = rs1 + rd;
rd = *(int64_t*)rs1;lui rd, IMMEDIATE_UPPER
rd = IMMEDIATE_UPPER;
rd = rd << 20;
rd = extend_signed_32bit(rd);
pc = pc + 4;sb rs2, IMMEDIATE_STORE(rs1)
rm1 = extend_signed_12bit(IMMEDIATE_STORE);
rs1 = rs1 + rm1;
*(int8_t*)rs1 = rs2;sh rs2, IMMEDIATE_STORE(rs1)
rm1 = extend_signed_12bit(IMMEDIATE_STORE);
rs1 = rs1 + rm1;
*(int16_t*)rs1 = rs2;sw rs2, IMMEDIATE_STORE(rs1)
rm1 = extend_signed_12bit(IMMEDIATE_STORE);
rs1 = rs1 + rm1;
*(int32_t*)rs1 = rs2;sd rs2, IMMEDIATE_STORE(rs1)
rm1 = extend_signed_12bit(IMMEDIATE_STORE);
rs1 = rs1 + rm1;
*(int64_t*)rs1 = rs2;