aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxavier.leroy <xavier.leroy@college-de-france.fr>2019-08-23 08:18:27 +0200
committerxavier.leroy <xavier.leroy@college-de-france.fr>2019-08-23 08:18:27 +0200
commit25a39ae6be7a4b65e01d9bb6b1fd94688aa674b0 (patch)
tree17509690913855a505c58f32c4637b53769ea2a7
parent7d5db993033ce049776fa290ae1ebc6051dea0f3 (diff)
downloadcompcert-25a39ae6be7a4b65e01d9bb6b1fd94688aa674b0.tar.gz
compcert-25a39ae6be7a4b65e01d9bb6b1fd94688aa674b0.zip
Offset out of range for ldp/stp instructions
These instructions are generated by __builtin_memcpy.
-rw-r--r--aarch64/Asmexpand.ml4
1 files changed, 3 insertions, 1 deletions
diff --git a/aarch64/Asmexpand.ml b/aarch64/Asmexpand.ml
index 71bd0042..ab155e9c 100644
--- a/aarch64/Asmexpand.ml
+++ b/aarch64/Asmexpand.ml
@@ -146,7 +146,9 @@ let expand_annot_val kind txt targ args res =
Temporary registers used: x15 x16 x17 x29 x30. *)
let offset_in_range ofs =
- let ofs = Z.to_int64 ofs in 0L <= ofs && ofs < 0x1000L
+ (* The 512 upper bound comes from ldp/stp. Single-register load/store
+ instructions support bigger offsets. *)
+ let ofs = Z.to_int64 ofs in 0L <= ofs && ofs < 512L
let memcpy_small_arg sz arg tmp =
match arg with