diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2020-04-16 20:23:35 +0200 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2020-04-20 13:30:03 +0200 |
commit | 438d541dbe5fe7d7fe6b7aacaa6e6ef070c2e237 (patch) | |
tree | f2ca20b3130b302bdaf3841d6105c8138dd48583 /cfrontend | |
parent | 0a2db0269809539ccc66f8ec73637c37fbd23580 (diff) | |
download | compcert-kvx-438d541dbe5fe7d7fe6b7aacaa6e6ef070c2e237.tar.gz compcert-kvx-438d541dbe5fe7d7fe6b7aacaa6e6ef070c2e237.zip |
Move reserved_registers to CPragmas.
The list of reserved_registers is never reset between the compilation of
multiple files. Instead of storing them in IRC they are moved in the
CPragmas file and reset in the a new reset function for Cpragmas whic is
called per file.
Diffstat (limited to 'cfrontend')
-rw-r--r-- | cfrontend/CPragmas.ml | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/cfrontend/CPragmas.ml b/cfrontend/CPragmas.ml index 44660718..ce2cfcf0 100644 --- a/cfrontend/CPragmas.ml +++ b/cfrontend/CPragmas.ml @@ -49,13 +49,15 @@ let process_use_section_pragma classname id = (* #pragma reserve_register *) +let reserved_registers = ref ([]: Machregs.mreg list) + let process_reserve_register_pragma name = match Machregsaux.register_by_name name with | None -> C2C.error "unknown register in `reserve_register' pragma" | Some r -> if Machregsaux.can_reserve_register r then - IRC.reserved_registers := r :: !IRC.reserved_registers + reserved_registers := r :: !reserved_registers else C2C.error "cannot reserve this register (not a callee-save)" @@ -84,5 +86,8 @@ let process_pragma name = | _ -> false +let reset () = + reserved_registers := [] + let initialize () = C2C.process_pragma_hook := process_pragma |