amiga-libnix2/sources/amiga/misc/AsmCreatePool.c

38 lines
1.1 KiB
C

#include "pool.h"
#define NEWLIST(l) ((l)->mlh_Head = (struct MinNode *)&(l)->mlh_Tail, \
(l)->mlh_Tail = NULL, \
(l)->mlh_TailPred = (struct MinNode *)&(l)->mlh_Head)
APTR ASM AsmCreatePool(REG(d0,ULONG requirements),REG(d1,ULONG puddleSize),REG(d2,ULONG threshSize),REG(a6,APTR SysBase))
{
if (((struct Library *)SysBase)->lib_Version>=39)
return (CreatePool(requirements,puddleSize,threshSize));
else {
POOL *pool=NULL;
if (threshSize<=puddleSize) {
puddleSize+=7;
if ((pool=(POOL *)AllocMem(sizeof(POOL),MEMF_ANY))!=NULL) {
NEWLIST(&pool->PuddleList);
pool->MemoryFlags=requirements;
pool->PuddleSize=puddleSize&~7;
pool->ThreshSize=threshSize;
}
}
return pool;
}
}
VOID ASM AsmDeletePool(REG(a0,POOL *poolHeader),REG(a6,APTR SysBase))
{ ULONG *pool,size;
if (((struct Library *)SysBase)->lib_Version>=39)
DeletePool(poolHeader);
else if (poolHeader!=NULL) {
while((pool=(ULONG *)RemHead((struct List *)&poolHeader->PuddleList))!=NULL) {
size=*--pool; FreeMem(pool,size);
}
FreeMem(poolHeader,sizeof(POOL));
}
}