From afe54de36234834449e72d9dc891a90291aadcb1 Mon Sep 17 00:00:00 2001 From: David Monniaux Date: Tue, 2 Feb 2021 18:19:01 +0100 Subject: fix problem if rt = rf --- riscV/Asmexpand.ml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/riscV/Asmexpand.ml b/riscV/Asmexpand.ml index 1f6597d1..14407bba 100644 --- a/riscV/Asmexpand.ml +++ b/riscV/Asmexpand.ml @@ -589,10 +589,13 @@ let expand_instruction instr = if not Archi.ptr64 then failwith "Pselectl not available on RV32, only on RV64" else - if not (ireg0_eq rt rf) - then - if (ireg0_eq (X rd) rt) - then + if ireg0_eq rt rf then + begin + if not (ireg0_eq (X rd) rt) then + emit (Paddil(rd, rt, Int64.zero)) + end + else + if (ireg0_eq (X rd) rt) then begin emit (Psubl(X31, X0, rb)); emit (Pandl(X31, X X31, rt)); @@ -601,8 +604,7 @@ let expand_instruction instr = emit (Porl(rd, X rd, X X31)) end else - if (ireg0_eq (X rd) rf) - then + if (ireg0_eq (X rd) rf) then begin emit (Paddil(X31, rb, Int64.mone)); emit (Pandl(X31, X X31, rf)); -- cgit