aboutsummaryrefslogtreecommitdiffstats
path: root/aarch64/Asm.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/Asm.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/Asm.v')
-rw-r--r--aarch64/Asm.v2
1 files changed, 1 insertions, 1 deletions
diff --git a/aarch64/Asm.v b/aarch64/Asm.v
index b5f4c838..c5f4032e 100644
--- a/aarch64/Asm.v
+++ b/aarch64/Asm.v
@@ -1067,7 +1067,7 @@ Definition exec_instr (f: function) (i: instruction) (rs: regset) (m: mem) : out
let sp := (Vptr stk Ptrofs.zero) in
match Mem.storev Mint64 m1 (Val.offset_ptr sp pos) rs#SP with
| None => Stuck
- | Some m2 => Next (nextinstr (rs #X29 <- (rs#SP) #SP <- sp #X16 <- Vundef)) m2
+ | Some m2 => Next (nextinstr (rs #X15 <- (rs#SP) #SP <- sp #X16 <- Vundef)) m2
end
| Pfreeframe sz pos =>
match Mem.loadv Mint64 m (Val.offset_ptr rs#SP pos) with