aboutsummaryrefslogtreecommitdiffstats
path: root/aarch64
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 /aarch64
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 'aarch64')
-rw-r--r--aarch64/Asmexpand.ml4
1 files changed, 2 insertions, 2 deletions
diff --git a/aarch64/Asmexpand.ml b/aarch64/Asmexpand.ml
index 6c58e075..573e8b92 100644
--- a/aarch64/Asmexpand.ml
+++ b/aarch64/Asmexpand.ml
@@ -192,8 +192,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 X17) then (X17, X29) else (X29, X17) in
+ let tsrc = if dst <> BA (IR X17) then X17 else X29 in
+ let tdst = if src <> BA (IR X29) then X29 else X17 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 =