diff options
author | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2021-09-23 12:52:11 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2021-09-23 19:53:00 +0200 |
commit | c34d25e011402aedad62b3fe9b7b04989df4522e (patch) | |
tree | 22d326c5cf94caabfcec76553b98616bbf44b1a2 | |
parent | c8ccecc783671fb699a33f432c34e3c1cd1dc801 (diff) | |
download | compcert-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
-rw-r--r-- | aarch64/Asmexpand.ml | 4 | ||||
-rw-r--r-- | arm/Asmexpand.ml | 4 | ||||
-rw-r--r-- | powerpc/Asmexpand.ml | 4 | ||||
-rw-r--r-- | riscV/Asmexpand.ml | 4 |
4 files changed, 8 insertions, 8 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 = diff --git a/arm/Asmexpand.ml b/arm/Asmexpand.ml index 01b18c37..223cf7fc 100644 --- a/arm/Asmexpand.ml +++ b/arm/Asmexpand.ml @@ -111,8 +111,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 IR2) then (IR2, IR3) else (IR3, IR2) in + let tsrc = if dst <> BA (IR IR2) then IR2 else IR3 in + let tdst = if src <> BA (IR IR3) then IR3 else IR2 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 = diff --git a/powerpc/Asmexpand.ml b/powerpc/Asmexpand.ml index 7efa80a6..45b3f708 100644 --- a/powerpc/Asmexpand.ml +++ b/powerpc/Asmexpand.ml @@ -118,8 +118,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 GPR11) then (GPR11, GPR12) else (GPR12, GPR11) in + let tsrc = if dst <> BA (IR GPR11) then GPR11 else GPR12 in + let tdst = if dst <> BA (IR GPR12) then GPR12 else GPR11 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 = 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 = |