aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linear.v
diff options
context:
space:
mode:
authorxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-08 06:31:10 +0000
committerxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-08 06:31:10 +0000
commit5909a0340ad0fe871dede1eaead855fb4b68fb0e (patch)
tree4dd849283a636edd09bbcc8be8c6371a11b6faa0 /backend/Linear.v
parent5d1c52555bb166430402103afe9540cc4c296487 (diff)
downloadcompcert-kvx-5909a0340ad0fe871dede1eaead855fb4b68fb0e.tar.gz
compcert-kvx-5909a0340ad0fe871dede1eaead855fb4b68fb0e.zip
IA32 port: more faithful treatment of pseudoregister ST0.
Related general change: support for destroyed_at_moves. git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1700 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'backend/Linear.v')
-rw-r--r--backend/Linear.v9
1 files changed, 6 insertions, 3 deletions
diff --git a/backend/Linear.v b/backend/Linear.v
index 3553ced9..b2185315 100644
--- a/backend/Linear.v
+++ b/backend/Linear.v
@@ -169,8 +169,8 @@ Definition return_regs (caller callee: locset) : locset :=
Definition undef_op (op: operation) (rs: locset) :=
match op with
- | Omove => rs
- | _ => undef_temps rs
+ | Omove => Locmap.undef destroyed_at_move rs
+ | _ => Locmap.undef temporaries rs
end.
Definition undef_getstack (s: slot) (rs: locset) :=
@@ -179,6 +179,9 @@ Definition undef_getstack (s: slot) (rs: locset) :=
| _ => rs
end.
+Definition undef_setstack (rs: locset) :=
+ Locmap.undef destroyed_at_move rs.
+
(** Linear execution states. *)
Inductive stackframe: Type :=
@@ -261,7 +264,7 @@ Inductive step: state -> trace -> state -> Prop :=
| exec_Lsetstack:
forall s f sp r sl b rs m,
step (State s f sp (Lsetstack r sl :: b) rs m)
- E0 (State s f sp b (Locmap.set (S sl) (rs (R r)) rs) m)
+ E0 (State s f sp b (Locmap.set (S sl) (rs (R r)) (undef_setstack rs)) m)
| exec_Lop:
forall s f sp op args res b rs m v,
eval_operation ge sp op (reglist rs args) m = Some v ->