Skip to content

Latest commit

 

History

History
50 lines (44 loc) · 2.09 KB

SC_Full.md

File metadata and controls

50 lines (44 loc) · 2.09 KB

SC_Full

Require Import List.
Import ListNotations.
From RecordUpdate Require Import RecordSet.
Import RecordSetNotations.

Require Import Base_Full.

(* Am SC evemt os am evemt issued by a certain thread*)
Inductive GlobalEvent :=
| GE (tid : TID) (e : Event) : GlobalEvent.

(* An SC state contains the memory state and register states *)
Record GlobalState := mkGlobalState{
    memstate : MemState;
    regstates : TID -> RegState
} 
.
Instance etaGlobalState : Settable _ :=  settable! mkGlobalState <memstate; regstates>.

(* replay SC execution *)
Inductive rel_replay_sc : list GlobalEvent -> GlobalState -> Prop :=
| SC_EMPTY : rel_replay_sc [] (mkGlobalState (fun _ => 0) (fun _ _ => 0))
| SC_INTERNAL : forall le gs tid i rs
                    (Hgs : rel_replay_sc le gs)
                    (Hinternal : execute_internal i (regstates gs tid) = Some rs),
                    rel_replay_sc (GE tid (INTERNAL i) :: le) 
                        (gs <| regstates := update (regstates gs) tid rs |>)
| SC_ORACLE : forall le gs tid reg val
                    (Hgs : rel_replay_sc le gs),
                    rel_replay_sc (GE tid (ORACLE reg val) :: le)
                        (gs <| regstates := update (regstates gs) tid (update (regstates gs tid) reg val) |>)
| SC_LOAD : forall le gs tid addr view reg
                    (Hgs : rel_replay_sc le gs),
                    rel_replay_sc (GE tid (LOAD addr view reg) :: le)
                        (gs <| regstates := update (regstates gs) tid (update (regstates gs tid) reg (memstate gs addr)) |>)
| SC_STORE : forall le gs tid addr view reg
                    (Hgs : rel_replay_sc le gs),
                    rel_replay_sc (GE tid (STORE addr view reg) :: le)
                        (gs <| memstate := update (memstate gs) addr (regstates gs tid reg) |>)
| SC_ACQ : forall le gs tid view addr
                    (Hgs : rel_replay_sc le gs),
                    rel_replay_sc (GE tid (ACQ view addr) :: le) gs
| SC_REL : forall le gs tid view addr
                    (Hgs : rel_replay_sc le gs),
                    rel_replay_sc (GE tid (REL view addr) :: le) gs.