# HG changeset patch # User Merten Sach # Date 1307010974 -7200 # Node ID d8f12351f7cc304844b24c2e85ea8f576ffb1996 # Parent 5ff1631c26ed929c476f71dc037bc2ca3a38202a generic VMS lib diff -r 5ff1631c26ed -r d8f12351f7cc CoreLoop.c --- a/CoreLoop.c Mon May 30 18:28:41 2011 +0200 +++ b/CoreLoop.c Thu Jun 02 12:36:14 2011 +0200 @@ -75,21 +75,8 @@ if(errorCode){ printf("\nset affinity failure\n"); exit(0); } - //Save addr of "end core loop" label - jump to it to shut down coreloop - //To get label addr in non-gcc compiler, can trick it by making a call - // to a fn that does asm that pulls the "return" - // addr off the stack and stores it in a pointed-to location. - saveCoreLoopReturnAddr(&(_VMSMasterEnv->coreLoopStartPt)); - - //Core loop has no values live upon CoreLoopStartPt except - // _VMSMasterEnv - // every value in the code is defined by a statement in core loop, - // after the start point -- with the one exception of _VMSMasterEnv - - - // Get to work! -- virt procr jumps back here when suspends - //Note, have to restore the frame-pointer before jump to here, to get - // this code to work right (readyToAnimateQ and so forth are frame-ptr relative) + //Save the return address in the SwitchVP function + saveCoreLoopReturnAddr(&(_VMSMasterEnv->coreLoopReturnPt)); while(1){ @@ -160,7 +147,7 @@ } - switchToVP(currPr); + switchToVP(currPr); //The VPs return in here flushRegisters(); }//CoreLoop } diff -r 5ff1631c26ed -r d8f12351f7cc VMS.h --- a/VMS.h Mon May 30 18:28:41 2011 +0200 +++ b/VMS.h Thu Jun 02 12:36:14 2011 +0200 @@ -225,8 +225,7 @@ MallocProlog *freeListHead; int32 amtOfOutstandingMem; //total currently allocated - void *coreLoopStartPt;//addr to jump to to re-enter coreLoop - void *coreLoopEndPt; //addr to jump to to shut down a coreLoop + void *coreLoopReturnPt;//addr to jump to to re-enter coreLoop int32 setupComplete; volatile int32 masterLock; @@ -403,6 +402,8 @@ #define MEAS__SUB_CREATE /*turn on/off subtraction of create from plugin*/ +#ifdef VPTHREAD + //VPThread #define createHistIdx 1 #define mutexLockHistIdx 2 @@ -410,34 +411,50 @@ #define condWaitHistIdx 4 #define condSignalHistIdx 5 +#define MakeTheMeasHists \ + _VMSMasterEnv->measHistsInfo = \ + makePrivDynArrayOfSize( (void***)&(_VMSMasterEnv->measHists), 200); \ + makeAMeasHist( createHistIdx, "Create", 50, 0, 100 ) \ + makeAMeasHist( mutexLockHistIdx, "mutex lock", 50, 0, 100 ) \ + makeAMeasHist( mutexUnlockHistIdx, "mutex unlock", 50, 0, 100 ) \ + makeAMeasHist( condWaitHistIdx, "cond wait", 50, 0, 100 ) \ + makeAMeasHist( condSignalHistIdx, "cond signal", 50, 0, 100 ) + +#endif + + +#ifdef VCILK + //VCilk #define spawnHistIdx 1 #define syncHistIdx 2 +#define MakeTheMeasHists \ + _VMSMasterEnv->measHistsInfo = \ + makePrivDynArrayOfSize( (void***)&(_VMSMasterEnv->measHists), 200); \ + makeAMeasHist( spawnHistIdx, "Spawn", 50, 0, 200 ) \ + makeAMeasHist( syncHistIdx, "Sync", 50, 0, 200 ) + + +#endif + +#ifdef SSR + //SSR #define SendFromToHistIdx 1 #define SendOfTypeHistIdx 2 #define ReceiveFromToHistIdx 3 #define ReceiveOfTypeHistIdx 4 - #define MakeTheMeasHists \ _VMSMasterEnv->measHistsInfo = \ - makePrivDynArrayOfSize( (void***)&(_VMSMasterEnv->measHists), 200);\ - makeAMeasHist( spawnHistIdx, "Spawn", 50, 0, 200 ) \ - makeAMeasHist( syncHistIdx, "Sync", 50, 0, 200 ) + makePrivDynArrayOfSize( (void***)&(_VMSMasterEnv->measHists), 200); \ + makeAMeasHist( SendFromToHistIdx, "SendFromTo", 50, 0, 100 ) \ + makeAMeasHist( SendOfTypeHistIdx, "SendOfType", 50, 0, 100 ) \ + makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \ + makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 ) -// makeAMeasHist( createHistIdx, "Create", 50, 0, 100 ) \ -// makeAMeasHist( mutexLockHistIdx, "mutex lock", 50, 0, 100 ) \ -// makeAMeasHist( mutexUnlockHistIdx, "mutex unlock", 50, 0, 100 ) \ -// makeAMeasHist( condWaitHistIdx, "cond wait", 50, 0, 100 ) \ -// makeAMeasHist( condSignalHistIdx, "cond signal", 50, 0, 100 ) - -// makeAMeasHist( SendFromToHistIdx, "SendFromTo", 50, 0, 100 ) \ -// makeAMeasHist( SendOfTypeHistIdx, "SendOfType", 50, 0, 100 ) \ -// makeAMeasHist( ReceiveFromToHistIdx,"ReceiveFromTo", 50, 0, 100 ) \ -// makeAMeasHist( ReceiveOfTypeHistIdx,"ReceiveOfType", 50, 0, 100 ) - +#endif //=========================================================================== //VPThread diff -r 5ff1631c26ed -r d8f12351f7cc contextSwitch.s --- a/contextSwitch.s Mon May 30 18:28:41 2011 +0200 +++ b/contextSwitch.s Thu Jun 02 12:36:14 2011 +0200 @@ -1,5 +1,3 @@ -#include "VMS.h" - .data @@ -26,9 +24,8 @@ * 0x20 coreLoopStackPtr * * _VMSMasterEnv offsets: - * 0x24 coreLoopStartPt - * 0x28 coreLoopEndPt - * 0x30 masterLock + * 0x24 coreLoopReturnPt + * 0x2c masterLock */ .globl switchToVP switchToVP: @@ -52,9 +49,9 @@ * 0x20 coreLoopStackPtr * * _VMSMasterEnv offsets: - * 0x24 coreLoopStartPt + * 0x24 coreLoopReturnPt * 0x28 coreLoopEndPt - * 0x30 masterLock + * 0x2c masterLock */ .globl switchToCoreLoop switchToCoreLoop: @@ -74,6 +71,7 @@ //switches to core loop from master. saves return address +//Releases masterLock so the next MasterLoop can be executed /* VirtProcr offsets: * 0xc stackPtr * 0x10 framePtr @@ -82,9 +80,8 @@ * 0x20 coreLoopStackPtr * * _VMSMasterEnv offsets: - * 0x24 coreLoopStartPt - * 0x28 coreLoopEndPt - * 0x30 masterLock + * 0x24 coreLoopReturnPt + * 0x2c masterLock */ .globl masterSwitchToCoreLoop masterSwitchToCoreLoop: @@ -97,15 +94,16 @@ movl $_VMSMasterEnv, %ecx movl (%ecx) , %ecx movl 0x24(%ecx), %eax #get CoreLoopStartPt - movl $0x0 , 0x30(%ecx) #release lock + movl $0x0 , 0x2c(%ecx) #release lock jmp *%eax #jmp to CoreLoop MasterReturn: ret //Switch to terminateCoreLoop -//no need to call because the stack is already set up for switchVP -//do not save register of VP because this function will never return +// no need to call because the stack is already set up for switchVP +// and both functions have the same argument. +// do not save register of VP because this function will never return /* VirtProcr offsets: * 0xc stackPtr * 0x10 framePtr @@ -114,9 +112,8 @@ * 0x20 coreLoopStackPtr * * _VMSMasterEnv offsets: - * 0x24 coreLoopStartPt - * 0x28 coreLoopEndPt - * 0x30 masterLock + * 0x24 coreLoopReturnPt + * 0x2c masterLock */ .globl asmTerminateCoreLoop asmTerminateCoreLoop: