mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-06-02 19:42:59 +00:00
231 lines
5.0 KiB
C
231 lines
5.0 KiB
C
/* PR 3967
|
|
|
|
local-alloc screwed up consideration of high+lo_sum and created
|
|
reg_equivs that it shouldn't have, resulting in lo_sum with
|
|
uninitialized data, resulting in segv. The test has to remain
|
|
relatively large, since register spilling is required to twig
|
|
the bug. */
|
|
|
|
unsigned long *Local1;
|
|
unsigned long *Local2;
|
|
unsigned long *Local3;
|
|
unsigned long *RDbf1;
|
|
unsigned long *RDbf2;
|
|
unsigned long *RDbf3;
|
|
unsigned long *IntVc1;
|
|
unsigned long *IntVc2;
|
|
unsigned long *IntCode3;
|
|
unsigned long *IntCode4;
|
|
unsigned long *IntCode5;
|
|
unsigned long *IntCode6;
|
|
unsigned long *Lom1;
|
|
unsigned long *Lom2;
|
|
unsigned long *Lom3;
|
|
unsigned long *Lom4;
|
|
unsigned long *Lom5;
|
|
unsigned long *Lom6;
|
|
unsigned long *Lom7;
|
|
unsigned long *Lom8;
|
|
unsigned long *Lom9;
|
|
unsigned long *Lom10;
|
|
unsigned long *RDbf11;
|
|
unsigned long *RDbf12;
|
|
|
|
typedef struct
|
|
{
|
|
long a1;
|
|
unsigned long n1;
|
|
unsigned long local1;
|
|
unsigned long local2;
|
|
unsigned long local3;
|
|
unsigned long rdbf1;
|
|
unsigned long rdbf2;
|
|
unsigned long milli;
|
|
unsigned long frames1;
|
|
unsigned long frames2;
|
|
unsigned long nonShared;
|
|
long newPrivate;
|
|
long freeLimit;
|
|
unsigned long cache1;
|
|
unsigned long cache2;
|
|
unsigned long cache3;
|
|
unsigned long cache4;
|
|
unsigned long cache5;
|
|
unsigned long time6;
|
|
unsigned long frames7;
|
|
unsigned long page8;
|
|
unsigned long ot9;
|
|
unsigned long data10;
|
|
unsigned long bm11;
|
|
unsigned long misc12;
|
|
}
|
|
ShrPcCommonStatSType;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
unsigned long sharedAttached;
|
|
unsigned long totalAttached;
|
|
long avgPercentShared;
|
|
unsigned long numberOfFreeFrames;
|
|
unsigned long localDirtyPageCount;
|
|
unsigned long globalDirtyPageCount;
|
|
long wakeupInterval;
|
|
unsigned long numActiveProcesses;
|
|
unsigned long numRecentActiveProcesses;
|
|
unsigned long gemDirtyPageKinds[10];
|
|
unsigned long stoneDirtyPageKinds[10];
|
|
unsigned long gemsInCacheCount;
|
|
long targetFreeFrameCount;
|
|
}
|
|
ShrPcMonStatSType;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned long c1;
|
|
unsigned long c2;
|
|
unsigned long c3;
|
|
unsigned long c4;
|
|
unsigned long c5;
|
|
unsigned long c6;
|
|
unsigned long c7;
|
|
unsigned long c8;
|
|
unsigned long c9;
|
|
unsigned long c10;
|
|
unsigned long c11;
|
|
unsigned long c12;
|
|
unsigned long a1;
|
|
unsigned long a2;
|
|
unsigned long a3;
|
|
unsigned long a4;
|
|
unsigned long a5;
|
|
unsigned long a6;
|
|
unsigned long a7;
|
|
unsigned long a8;
|
|
unsigned long a9;
|
|
unsigned long a10;
|
|
unsigned long a11;
|
|
unsigned long a12;
|
|
unsigned long a13;
|
|
unsigned long a14;
|
|
unsigned long a15;
|
|
unsigned long a16;
|
|
unsigned long a17;
|
|
unsigned long a18;
|
|
unsigned long a19;
|
|
unsigned long sessionStats[40];
|
|
}
|
|
ShrPcGemStatSType;
|
|
|
|
union ShrPcStatUnion
|
|
{
|
|
ShrPcMonStatSType monitor;
|
|
ShrPcGemStatSType gem;
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
int processId;
|
|
int sessionId;
|
|
ShrPcCommonStatSType cmn;
|
|
union ShrPcStatUnion u;
|
|
} ShrPcStatsSType;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned long *p1;
|
|
unsigned long *p2;
|
|
unsigned long *p3;
|
|
unsigned long *p4;
|
|
unsigned long *p5;
|
|
unsigned long *p6;
|
|
unsigned long *p7;
|
|
unsigned long *p8;
|
|
unsigned long *p9;
|
|
unsigned long *p10;
|
|
unsigned long *p11;
|
|
}
|
|
WorkEntrySType;
|
|
|
|
WorkEntrySType Workspace;
|
|
|
|
static void
|
|
setStatPointers (ShrPcStatsSType * statsPtr, long sessionId)
|
|
{
|
|
statsPtr->sessionId = sessionId;
|
|
statsPtr->cmn.a1 = 0;
|
|
statsPtr->cmn.n1 = 5;
|
|
|
|
Local1 = &statsPtr->cmn.local1;
|
|
Local2 = &statsPtr->cmn.local2;
|
|
Local3 = &statsPtr->cmn.local3;
|
|
RDbf1 = &statsPtr->cmn.rdbf1;
|
|
RDbf2 = &statsPtr->cmn.rdbf2;
|
|
RDbf3 = &statsPtr->cmn.milli;
|
|
*RDbf3 = 1;
|
|
|
|
IntVc1 = &statsPtr->u.gem.a1;
|
|
IntVc2 = &statsPtr->u.gem.a2;
|
|
IntCode3 = &statsPtr->u.gem.a3;
|
|
IntCode4 = &statsPtr->u.gem.a4;
|
|
IntCode5 = &statsPtr->u.gem.a5;
|
|
IntCode6 = &statsPtr->u.gem.a6;
|
|
|
|
{
|
|
WorkEntrySType *workSpPtr;
|
|
workSpPtr = &Workspace;
|
|
workSpPtr->p1 = &statsPtr->u.gem.a7;
|
|
workSpPtr->p2 = &statsPtr->u.gem.a8;
|
|
workSpPtr->p3 = &statsPtr->u.gem.a9;
|
|
workSpPtr->p4 = &statsPtr->u.gem.a10;
|
|
workSpPtr->p5 = &statsPtr->u.gem.a11;
|
|
workSpPtr->p6 = &statsPtr->u.gem.a12;
|
|
workSpPtr->p7 = &statsPtr->u.gem.a13;
|
|
workSpPtr->p8 = &statsPtr->u.gem.a14;
|
|
workSpPtr->p9 = &statsPtr->u.gem.a15;
|
|
workSpPtr->p10 = &statsPtr->u.gem.a16;
|
|
workSpPtr->p11 = &statsPtr->u.gem.a17;
|
|
}
|
|
Lom1 = &statsPtr->u.gem.c1;
|
|
Lom2 = &statsPtr->u.gem.c2;
|
|
Lom3 = &statsPtr->u.gem.c3;
|
|
Lom4 = &statsPtr->u.gem.c4;
|
|
Lom5 = &statsPtr->u.gem.c5;
|
|
Lom6 = &statsPtr->u.gem.c6;
|
|
Lom7 = &statsPtr->u.gem.c7;
|
|
Lom8 = &statsPtr->u.gem.c8;
|
|
Lom9 = &statsPtr->u.gem.c9;
|
|
Lom10 = &statsPtr->u.gem.c10;
|
|
RDbf11 = &statsPtr->u.gem.c11;
|
|
RDbf12 = &statsPtr->u.gem.c12;
|
|
}
|
|
|
|
typedef struct
|
|
{
|
|
ShrPcStatsSType stats;
|
|
} ShrPcPteSType;
|
|
|
|
ShrPcPteSType MyPte;
|
|
|
|
static void
|
|
initPte (void *shrpcPtr, long sessionId)
|
|
{
|
|
ShrPcPteSType *ptePtr;
|
|
|
|
ptePtr = &MyPte;
|
|
setStatPointers (&ptePtr->stats, sessionId);
|
|
}
|
|
|
|
void
|
|
InitCache (int sessionId)
|
|
{
|
|
initPte (0, sessionId);
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
InitCache (5);
|
|
return 0;
|
|
}
|