/*
 *  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(VirtProcr *nextProcr);

void switchToCoreLoop(VirtProcr *nextProcr);

void masterSwitchToCoreLoop(VirtProcr *nextProcr);

void startVirtProcrFn();

void *asmTerminateCoreLoop(VirtProcr *currPr);

#define flushRegisters() \
        asm volatile ("":::"%rbx", "%r12", "%r13","%r14","%r15")

inline VirtProcr *
create_procr_helper( VirtProcr *newPr,       VirtProcrFnPtr  fnPtr,
                     void      *initialData, void           *stackLocs );

#endif	/* _ProcrContext_H */

