/*
 *  Copyright 2009 OpenSourceStewardshipFoundation.org
 *  Licensed under GNU General Public License version 2
 *
 * Author: seanhalle@yahoo.com
 * 
 */

#ifndef _ProcrContext_H
#define	_ProcrContext_H
#define _GNU_SOURCE

void saveCoreLoopReturnAddr(void **returnAddress);

void switchToVP(SlaveVP *nextProcr);

void switchToCoreLoop(SlaveVP *nextProcr);

void masterSwitchToCoreLoop(SlaveVP *nextProcr);

void startVPFn();

void *asmTerminateCoreLoop(SlaveVP *currPr);

#define flushRegisters() \
        asm volatile ("":::"%rbx", "%r12", "%r13","%r14","%r15")

inline SlaveVP *
create_procr_helper( SlaveVP *newPr,       VirtProcrFnPtr  fnPtr,
                     void      *initialData, void           *stackLocs );

#endif	/* _ProcrContext_H */

