aboutsummaryrefslogtreecommitdiffstats
path: root/arm
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2015-04-23 14:49:30 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2015-04-23 14:49:30 +0200
commit5ad466befa609df178f04886484ee38b1a9c44ed (patch)
treec2752db1bd09224cda15df4f3c3cf9dbc3c0dc8a /arm
parent3ca2af08f068eb1edf638b8ef602b816823873e0 (diff)
downloadcompcert-kvx-5ad466befa609df178f04886484ee38b1a9c44ed.tar.gz
compcert-kvx-5ad466befa609df178f04886484ee38b1a9c44ed.zip
Take asm clobbers into account for determining callee-save registers used.
Diffstat (limited to 'arm')
-rw-r--r--arm/Machregsaux.ml7
-rw-r--r--arm/Machregsaux.mli1
2 files changed, 8 insertions, 0 deletions
diff --git a/arm/Machregsaux.ml b/arm/Machregsaux.ml
index 5486c4b4..3f7d0693 100644
--- a/arm/Machregsaux.ml
+++ b/arm/Machregsaux.ml
@@ -41,3 +41,10 @@ let can_reserve_register r =
List.mem r Conventions1.int_callee_save_regs
|| List.mem r Conventions1.float_callee_save_regs
+let mregs_of_clobber idl =
+ List.fold_left
+ (fun l c ->
+ match register_by_name (Camlcoq.extern_atom c) with
+ | Some r -> r :: l
+ | None -> l)
+ [] idl
diff --git a/arm/Machregsaux.mli b/arm/Machregsaux.mli
index 400c5abb..90343b5b 100644
--- a/arm/Machregsaux.mli
+++ b/arm/Machregsaux.mli
@@ -15,3 +15,4 @@
val register_by_name: string -> Machregs.mreg option
val can_reserve_register: Machregs.mreg -> bool
val name_of_register: Machregs.mreg -> string option
+val mregs_of_clobber: Camlcoq.atom list -> Machregs.mreg list