aboutsummaryrefslogtreecommitdiffstats
path: root/riscV
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2021-09-23 12:52:11 +0200
committerXavier Leroy <xavier.leroy@college-de-france.fr>2021-09-23 19:53:00 +0200
commitc34d25e011402aedad62b3fe9b7b04989df4522e (patch)
tree22d326c5cf94caabfcec76553b98616bbf44b1a2 /riscV
parentc8ccecc783671fb699a33f432c34e3c1cd1dc801 (diff)
downloadcompcert-kvx-c34d25e011402aedad62b3fe9b7b04989df4522e.tar.gz
compcert-kvx-c34d25e011402aedad62b3fe9b7b04989df4522e.zip
Fix wrong expansion of __builtin_memcpy_aligned
In the "small" case, there was an error in the choice of temporary registers to use when one argument is a stack location and the other is a register. The chosen temporary could conflict with the argument that resides in a register. Fixes: #412
Diffstat (limited to 'riscV')
-rw-r--r--riscV/Asmexpand.ml4
1 files changed, 2 insertions, 2 deletions
diff --git a/riscV/Asmexpand.ml b/riscV/Asmexpand.ml
index dc0ec184..ab0e6fee 100644
--- a/riscV/Asmexpand.ml
+++ b/riscV/Asmexpand.ml
@@ -170,8 +170,8 @@ let memcpy_small_arg sz arg tmp =
assert false
let expand_builtin_memcpy_small sz al src dst =
- let (tsrc, tdst) =
- if dst <> BA (IR X5) then (X5, X6) else (X6, X5) in
+ let tsrc = if dst <> BA (IR X5) then X5 else X6 in
+ let tdst = if src <> BA (IR X6) then X6 else X5 in
let (rsrc, osrc) = memcpy_small_arg sz src tsrc in
let (rdst, odst) = memcpy_small_arg sz dst tdst in
let rec copy osrc odst sz =