aboutsummaryrefslogtreecommitdiffstats
path: root/aarch64/Machregs.v
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2022-05-25 15:32:17 +0200
committerXavier Leroy <xavier.leroy@college-de-france.fr>2022-05-30 17:38:07 +0200
commitd357b5c52fb9ac70679fa8abd47094e89a6c3fa1 (patch)
treeafc9759833de393a36b6156a1ff0a7cc1db65bec /aarch64/Machregs.v
parent318fc06823eb577e9b386aeea57133e8c3938ecf (diff)
downloadcompcert-d357b5c52fb9ac70679fa8abd47094e89a6c3fa1.tar.gz
compcert-d357b5c52fb9ac70679fa8abd47094e89a6c3fa1.zip
AArch64: make register X29 callee-save
CompCert doesn't maintain a frame pointer in X29. However, it must treat X29 as callee-save, so that CompCert-generated code can be called from code that uses X29 as frame pointer. This commit makes X29 callee-save. In places where X29 was used as a temporary, X15 or X14 is used instead.
Diffstat (limited to 'aarch64/Machregs.v')
-rw-r--r--aarch64/Machregs.v6
1 files changed, 3 insertions, 3 deletions
diff --git a/aarch64/Machregs.v b/aarch64/Machregs.v
index 704c392e..f9b9fd79 100644
--- a/aarch64/Machregs.v
+++ b/aarch64/Machregs.v
@@ -156,18 +156,18 @@ Fixpoint destroyed_by_clobber (cl: list string): list mreg :=
Definition destroyed_by_builtin (ef: external_function): list mreg :=
match ef with
- | EF_memcpy sz al => R15 :: R17 :: R29 :: nil
+ | EF_memcpy sz al => R14 :: R15 :: R17 :: nil
| EF_inline_asm txt sg clob => destroyed_by_clobber clob
| _ => nil
end.
Definition destroyed_by_setstack (ty: typ): list mreg := nil.
-Definition destroyed_at_function_entry: list mreg := R29 :: nil.
+Definition destroyed_at_function_entry: list mreg := R15 :: nil.
Definition destroyed_at_indirect_call: list mreg := nil.
-Definition temp_for_parent_frame: mreg := R29.
+Definition temp_for_parent_frame: mreg := R15.
Definition mregs_for_operation (op: operation): list (option mreg) * option mreg :=
(nil, None).