diff --git a/compiler/riscv/aasmcpu.pas b/compiler/riscv/aasmcpu.pas index 30acbaa154..c6b1baa5c8 100644 --- a/compiler/riscv/aasmcpu.pas +++ b/compiler/riscv/aasmcpu.pas @@ -527,6 +527,14 @@ uses cutils, cclasses; function taicpu.spilling_get_operation_type_ref(opnr: longint; reg: tregister): topertype; begin result := operand_read; + case opcode of +{$ifdef RISCV64} + A_SD, +{$endif RISCV64} + A_SB,A_SH,A_SW: + if opnr=1 then + result:=operand_write; + end; end; diff --git a/compiler/riscv64/aoptcpu.pas b/compiler/riscv64/aoptcpu.pas index 34ae3695ad..3eb1bd9bbe 100644 --- a/compiler/riscv64/aoptcpu.pas +++ b/compiler/riscv64/aoptcpu.pas @@ -112,6 +112,7 @@ implementation (hp1.typ=ait_instruction) and (taicpu(hp1).opcode=A_ADDI) and (taicpu(hp1).ops=3) and + (taicpu(p).oper[0]^.reg=taicpu(hp1).oper[1]^.reg) and (taicpu(p).oper[2]^.typ=top_const) and is_imm12(taicpu(p).oper[2]^.val+taicpu(hp1).oper[2]^.val) and (not RegModifiedBetween(taicpu(p).oper[1]^.reg, p,hp1)) and