diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-05-09 14:46:36 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2019-05-09 14:46:36 +0200 |
commit | 812efcd97046d6813c88f34b1b64aefae6d7e08d (patch) | |
tree | 937877925306306d51ccdec49fbbe53fef786e52 | |
parent | 202a0a0a32bbddaa02ca429a4c1e6c74d1033aab (diff) | |
download | compcert-kvx-812efcd97046d6813c88f34b1b64aefae6d7e08d.tar.gz compcert-kvx-812efcd97046d6813c88f34b1b64aefae6d7e08d.zip |
slightly improved memcpy
-rw-r--r-- | mppa_k1c/Asmexpand.ml | 35 |
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 |