Library mcertikos.proc.PCVIntroCSource
Require Import Coqlib.
Require Import AST.
Require Import Integers.
Require Import Values.
Require Import Cop.
Require Import Clight.
Require Import CDataTypes.
Require Import Ctypes.
Definition _i := 10%positive.
Definition _mbi_adr := 11%positive.
Require Import AST.
Require Import Integers.
Require Import Values.
Require Import Cop.
Require Import Clight.
Require Import CDataTypes.
Require Import Ctypes.
Definition _i := 10%positive.
Definition _mbi_adr := 11%positive.
#define num_chan 16337
extern void init_sync_chan (unsigned int index);
extern void tdqueue_init (unsigned int mbi_adr);
void fifobbq_pool_init (unsigned int mbi_adr){
unsigned int i;
tdqueue_init(mbi_adr);
i = 0;
while (i < num_chan){
init_sync_chan(i);
i++;
}
}
Definition f_fifobbq_pool_init_while_condition :=
(Ebinop Olt (Etempvar _i tuint) (Econst_int (Int.repr num_chan) tint) tint).
Definition f_fifobbq_pool_init_while_body :=
(Ssequence
(Scall None (Evar init_sync_chan (Tfunction (Tcons tuint Tnil) tvoid cc_default))
((Etempvar _i tuint) :: nil))
(Sset _i (Ebinop Oadd (Etempvar _i tuint) (Econst_int (Int.repr 1) tint) tuint))).
Definition f_fifobbq_pool_init_body :=
(Ssequence
(Scall None
(Evar tdqueue_init (Tfunction (Tcons tuint Tnil) tvoid cc_default))
((Etempvar _mbi_adr tuint) :: nil))
(Ssequence
(Sset _i (Econst_int (Int.repr 0) tint))
(Swhile f_fifobbq_pool_init_while_condition
f_fifobbq_pool_init_while_body))).
Definition f_fifobbq_pool_init :=
{|
fn_return := tvoid;
fn_callconv := cc_default;
fn_params := ((_mbi_adr, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_i, tuint) :: nil);
fn_body := f_fifobbq_pool_init_body
|}.
#define MAX_BUFFSIZE 1024
unsigned int
ipc_send_body(unsigned int chid, unsigned int sender_kpa, unsigned int scount)
{
//unsigned int myid = get_curid();
//unsigned int sender_kpa = get_kernel_pa(myid, vaddr);
//set_sync_chan_to(chid, myid);
if (scount < MAX_BUFFSIZE) {
//set_sync_chan_paddr(chid, sender_kpa);
set_sync_chan_count(chid, scount);
page_copy(chid, scount, vaddr);
return scount;
} else {
//set_sync_chan_paddr(chid, sender_kpa);
set_sync_chan_count(chid, MAX_BUFFSIZE);
page_copy(chid, MAX_BUFFSIZE, sender_kpa);
return MAX_BUFFSIZE;
}
}
Let _scount : ident := 40%positive.
Let _chid : ident := 38%positive.
Let _vaddr : ident := 39%positive.
Definition ipc_send_body_body :=
(Sifthenelse (Ebinop Olt (Etempvar _scount tuint)
(Econst_int (Int.repr 1024) tint) tint)
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _scount tuint) :: nil))
(Ssequence
(Scall None
(Evar page_copy (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _scount tuint) ::
(Etempvar _vaddr tuint) :: nil))
(Sreturn (Some (Etempvar _scount tuint)))))
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Etempvar _chid tuint) :: (Econst_int (Int.repr 1024) tint) ::
nil))
(Ssequence
(Scall None
(Evar page_copy (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) ::
(Econst_int (Int.repr 1024) tint) ::
(Etempvar _vaddr tuint) :: nil))
(Sreturn (Some (Econst_int (Int.repr 1024) tint)))))).
Definition f_ipc_send_body := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_vaddr, tuint) :: (_scount, tuint) :: nil);
fn_vars := nil;
fn_temps := nil;
fn_body := ipc_send_body_body
|}.
Let _chid : ident := 38%positive.
Let _vaddr : ident := 39%positive.
Definition ipc_send_body_body :=
(Sifthenelse (Ebinop Olt (Etempvar _scount tuint)
(Econst_int (Int.repr 1024) tint) tint)
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _scount tuint) :: nil))
(Ssequence
(Scall None
(Evar page_copy (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _scount tuint) ::
(Etempvar _vaddr tuint) :: nil))
(Sreturn (Some (Etempvar _scount tuint)))))
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Etempvar _chid tuint) :: (Econst_int (Int.repr 1024) tint) ::
nil))
(Ssequence
(Scall None
(Evar page_copy (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) ::
(Econst_int (Int.repr 1024) tint) ::
(Etempvar _vaddr tuint) :: nil))
(Sreturn (Some (Econst_int (Int.repr 1024) tint)))))).
Definition f_ipc_send_body := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_vaddr, tuint) :: (_scount, tuint) :: nil);
fn_vars := nil;
fn_temps := nil;
fn_body := ipc_send_body_body
|}.
#define NUM_PROC 1204
unsigned int
ipc_receive_body(unsigned int chid, unsigned int vaddr, unsigned int rcount)
{
//unsigned int myid = get_curid();
unsigned int sender_count = get_sync_chan_count(chid);
unsigned int arecvcount = (sender_count < rcount) ? sender_count : rcount;
//unsigned int rbuffpa = get_kernel_pa(myid, vaddr);
page_copy_back(chid, arecvcount, vaddr);
//set_sync_chan_to(chid, NUM_PROC);
//set_sync_chan_paddr(chid, 0);
set_sync_chan_count(chid, 0);
return arecvcount;
}
Let _senderid : ident := 146%positive.
Let _rcount : ident := 143%positive.
Let _arecvcount : ident := 147%positive.
Let _sender_count : ident := 15%positive.
Definition ipc_receive_body_body :=
(Ssequence
(Scall (Some _sender_count)
(Evar get_sync_chan_count (Tfunction (Tcons tuint Tnil) tuint
cc_default))
((Etempvar _chid tuint) :: nil))
(Ssequence
(Sifthenelse (Ebinop Olt (Etempvar _sender_count tuint)
(Etempvar _rcount tuint) tint)
(Sset _arecvcount (Ecast (Etempvar _sender_count tuint) tuint))
(Sset _arecvcount (Ecast (Etempvar _rcount tuint) tuint)))
(Ssequence
(Scall None
(Evar page_copy_back (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _arecvcount tuint) ::
(Etempvar _vaddr tuint) :: nil))
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint
(Tcons tuint Tnil)) tvoid
cc_default))
((Etempvar _chid tuint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Sreturn (Some (Etempvar _arecvcount tuint))))))).
Definition f_ipc_receive_body :=
{|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_vaddr, tuint) :: (_rcount, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_sender_count, tuint) ::
(_arecvcount, tuint) :: nil);
fn_body := ipc_receive_body_body
|}.
Let _rcount : ident := 143%positive.
Let _arecvcount : ident := 147%positive.
Let _sender_count : ident := 15%positive.
Definition ipc_receive_body_body :=
(Ssequence
(Scall (Some _sender_count)
(Evar get_sync_chan_count (Tfunction (Tcons tuint Tnil) tuint
cc_default))
((Etempvar _chid tuint) :: nil))
(Ssequence
(Sifthenelse (Ebinop Olt (Etempvar _sender_count tuint)
(Etempvar _rcount tuint) tint)
(Sset _arecvcount (Ecast (Etempvar _sender_count tuint) tuint))
(Sset _arecvcount (Ecast (Etempvar _rcount tuint) tuint)))
(Ssequence
(Scall None
(Evar page_copy_back (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _arecvcount tuint) ::
(Etempvar _vaddr tuint) :: nil))
(Ssequence
(Scall None
(Evar set_sync_chan_count (Tfunction
(Tcons tuint
(Tcons tuint Tnil)) tvoid
cc_default))
((Etempvar _chid tuint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Sreturn (Some (Etempvar _arecvcount tuint))))))).
Definition f_ipc_receive_body :=
{|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_vaddr, tuint) :: (_rcount, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_sender_count, tuint) ::
(_arecvcount, tuint) :: nil);
fn_body := ipc_receive_body_body
|}.
#define num_cv 255
#define num_proc 1024
void
idq_push(unsigned int chid, unsigned int qid, unsigned int tid)
{
unsigned int h;
unsigned int t;
h = fifobbq_get_head(chid, qid);
if (h == num_proc)
{
fifobbq_set_head(chid, qid, tid);
fifobbq_set_tail(chid, qid, tid);
}
else
{
t = fifobbq_get_tail(chid, qid);
fifobbq_set_head(chid, qid, h);
fifobbq_set_tail(chid, qid, tid);
idq_set_next(t, tid);
idq_set_prev(tid, t);
idq_set_next(tid, num_proc);
}
}
Let _qid := 1001 % positive.
Let _tid := 1002 % positive.
Let _h := 1003 % positive.
Let _t := 1004 % positive.
Definition idq_push_body :=
(Ssequence
(Scall (Some _h)
(Evar fifobbq_get_head (Tfunction (Tcons tuint (Tcons tuint Tnil))
tuint cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _h tuint)
(Econst_int (Int.repr num_proc) tint) tint)
(Ssequence
(Scall None
(Evar fifobbq_set_head (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _tid tuint) :: nil))
(Scall None
(Evar fifobbq_set_tail (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _tid tuint) :: nil)))
(Ssequence
(Scall (Some _t)
(Evar fifobbq_get_tail (Tfunction (Tcons tuint (Tcons tuint Tnil))
tuint cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) :: nil))
(Ssequence
(Scall None
(Evar fifobbq_set_head (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil))) tvoid
cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _h tuint) :: nil))
(Ssequence
(Scall None
(Evar fifobbq_set_tail (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil)))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _tid tuint) :: nil))
(Ssequence
(Scall None
(Evar idq_set_next (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Etempvar _t tuint) :: (Etempvar _tid tuint) :: nil))
(Ssequence
(Scall None
(Evar idq_set_prev (Tfunction
(Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Etempvar _tid tuint) :: (Etempvar _t tuint) :: nil))
(Scall None
(Evar idq_set_next (Tfunction
(Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Etempvar _tid tuint) :: (Econst_int (Int.repr num_proc) tint) ::
nil))))))))).
Definition f_idq_push := {|
fn_return := tvoid;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_qid, tuint) :: (_tid, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_h, tuint) :: (_t, tuint) :: nil);
fn_body := idq_push_body
|}.
#define num_cv 255
#define num_proc 1024
unsigned int
idq_pull(unsigned int chid, unsigned int qid)
{
unsigned int h;
unsigned int t;
unsigned int n;
h = fifobbq_get_head(chid, qid);
t = fifobbq_get_tail(chid, qid);
if (h == t)
{
fifobbq_set_head(chid, qid, num_proc);
fifobbq_set_tail(chid, qid, num_proc);
}
else
{
n = idq_get_next(h);
fifobbq_set_head(chid, qid, n);
fifobbq_set_tail(chid, qid, t);
}
return h;
}
Let _n := 1005 % positive.
Definition idq_pull_body :=
(Ssequence
(Scall (Some _h)
(Evar fifobbq_get_head (Tfunction (Tcons tuint (Tcons tuint Tnil))
tuint cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) :: nil))
(Ssequence
(Scall (Some _t)
(Evar fifobbq_get_tail (Tfunction (Tcons tuint (Tcons tuint Tnil))
tuint cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) :: nil))
(Ssequence
(Sifthenelse (Ebinop Oeq (Etempvar _h tuint) (Etempvar _t tuint) tint)
(Ssequence
(Scall None
(Evar fifobbq_set_head (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil)))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Econst_int (Int.repr num_proc) tint) :: nil))
(Scall None
(Evar fifobbq_set_tail (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil)))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Econst_int (Int.repr num_proc) tint) :: nil)))
(Ssequence
(Scall (Some _n)
(Evar idq_get_next (Tfunction (Tcons tuint Tnil) tuint
cc_default))
((Etempvar _h tuint) :: nil))
(Ssequence
(Scall None
(Evar fifobbq_set_head (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil)))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _n tuint) :: nil))
(Scall None
(Evar fifobbq_set_tail (Tfunction
(Tcons tuint
(Tcons tuint (Tcons tuint Tnil)))
tvoid cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) ::
(Etempvar _t tuint) :: nil)))))
(Sreturn (Some (Etempvar _h tuint)))))).
Definition f_idq_pull := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_qid, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_h, tuint) :: (_t, tuint) :: (_n, tuint) :: nil);
fn_body := idq_pull_body
|}.
unsigned int
idq_peek(unsigned int chid, unsigned int qid)
{
unsigned int h;
h = fifobbq_get_head(chid, qid);
return h;
}
Definition idq_peek_body :=
(Ssequence
(Scall (Some _h)
(Evar fifobbq_get_head (Tfunction (Tcons tuint (Tcons tuint Tnil))
tuint cc_default))
((Etempvar _chid tuint) :: (Etempvar _qid tuint) :: nil))
(Sreturn (Some (Etempvar _h tuint)))).
Definition f_idq_peek := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_chid, tuint) :: (_qid, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_h, tuint) :: nil);
fn_body := idq_peek_body
|}.