aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2021-02-02 18:19:01 +0100
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2021-02-02 18:19:01 +0100
commitafe54de36234834449e72d9dc891a90291aadcb1 (patch)
tree540eae7d0c2c4ae2e97125587da8df9f3e6378f3
parent7d60eca51d9f1815834a132eb634b251bdfb6e6b (diff)
downloadcompcert-kvx-afe54de36234834449e72d9dc891a90291aadcb1.tar.gz
compcert-kvx-afe54de36234834449e72d9dc891a90291aadcb1.zip
fix problem if rt = rf
-rw-r--r--riscV/Asmexpand.ml14
1 files 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));