aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-09 14:46:36 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2019-05-09 14:46:36 +0200
commit812efcd97046d6813c88f34b1b64aefae6d7e08d (patch)
tree937877925306306d51ccdec49fbbe53fef786e52
parent202a0a0a32bbddaa02ca429a4c1e6c74d1033aab (diff)
downloadcompcert-kvx-812efcd97046d6813c88f34b1b64aefae6d7e08d.tar.gz
compcert-kvx-812efcd97046d6813c88f34b1b64aefae6d7e08d.zip
slightly improved memcpy
-rw-r--r--mppa_k1c/Asmexpand.ml35
1 files changed, 23 insertions, 12 deletions
diff --git a/mppa_k1c/Asmexpand.ml b/mppa_k1c/Asmexpand.ml
index 55585905..98c60f42 100644
--- a/mppa_k1c/Asmexpand.ml
+++ b/mppa_k1c/Asmexpand.ml
@@ -156,18 +156,29 @@ let expand_builtin_memcpy_big sz al src dst =
if memcpy_by_doubleword && (Int64.shift_left caml_sz_div8 3) = caml_sz
then
begin
- emit (Pmake (tmpbuf, (coqint_of_camlint64 caml_sz_div8)));
- emit Psemi;
- let lbl = new_label() in
- emit (Ploopdo (tmpbuf, lbl));
- emit Psemi;
- emit (Pld (tmpbuf, srcptr, AOff Z.zero));
- emit (Paddil (srcptr, srcptr, eight));
- emit Psemi;
- emit (Psd (tmpbuf, dstptr, AOff Z.zero));
- emit (Paddil (dstptr, dstptr, eight));
- emit Psemi;
- emit (Plabel lbl)
+ if caml_sz_div8 >= 2L
+ then
+ begin
+ emit (Pmake (tmpbuf, (coqint_of_camlint64 caml_sz_div8)));
+ emit Psemi;
+ let lbl = new_label() in
+ emit (Ploopdo (tmpbuf, lbl));
+ emit Psemi;
+ emit (Pld (tmpbuf, srcptr, AOff Z.zero));
+ emit (Paddil (srcptr, srcptr, eight));
+ emit Psemi;
+ emit (Psd (tmpbuf, dstptr, AOff Z.zero));
+ emit (Paddil (dstptr, dstptr, eight));
+ emit Psemi;
+ emit (Plabel lbl)
+ end
+ else
+ begin
+ emit (Pld (tmpbuf, srcptr, AOff Z.zero));
+ emit Psemi;
+ emit (Psd (tmpbuf, dstptr, AOff Z.zero));
+ emit Psemi;
+ end
end
else
begin