aboutsummaryrefslogtreecommitdiff
path: root/devel/cocktail/files/patch-reuse-m2c-rMemory.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/cocktail/files/patch-reuse-m2c-rMemory.c')
-rw-r--r--devel/cocktail/files/patch-reuse-m2c-rMemory.c167
1 files changed, 143 insertions, 24 deletions
diff --git a/devel/cocktail/files/patch-reuse-m2c-rMemory.c b/devel/cocktail/files/patch-reuse-m2c-rMemory.c
index 210a288e05bc..e9a4b7bcd853 100644
--- a/devel/cocktail/files/patch-reuse-m2c-rMemory.c
+++ b/devel/cocktail/files/patch-reuse-m2c-rMemory.c
@@ -1,39 +1,158 @@
---- ../../work/cocktail-9309//./reuse/m2c/rMemory.c Tue Feb 15 14:26:55 1994
-+++ ./reuse/m2c/rMemory.c Wed Mar 31 22:35:06 2004
-@@ -49,6 +49,10 @@
+--- /usr/ports/devel/cocktail/work/cocktail-9309//./reuse/m2c/rMemory.c Tue Feb 15 14:26:55 1994
++++ ./reuse/m2c/rMemory.c Thu Aug 5 18:49:34 2004
+@@ -18,28 +18,13 @@
+
+ LONGCARD rMemory_MemoryUsed;
+
+-#define MinSizeSmallBlock 4
+-#define MaxSizeSmallBlock 62
+-#define MinSizeLargeBlockLog 6
+-#define MaxSizeLargeBlockLog 24
+-#define PoolSize 10240
+ typedef struct S_1 *tBlockPtr;
+ typedef struct S_1 {
+ tBlockPtr Successor;
+ LONGINT Size;
+ } tBlock;
+-typedef LONGCARD tSmallBlockRange;
+-typedef LONGCARD tLargeBlockRange;
+-static struct S_2 {
+- ADDRESS A[MaxSizeSmallBlock - MinSizeSmallBlock + 1];
+-} SmallChain;
+-static struct S_3 {
+- ADDRESS A[MaxSizeLargeBlockLog - MinSizeLargeBlockLog + 1];
+-} LargeChain;
+ static ADDRESS PoolFreePtr;
+ static ADDRESS PoolEndPtr;
+-static tSmallBlockRange i;
+-static tLargeBlockRange j;
+
+ ADDRESS rMemory_Alloc
+ # ifdef __STDC__
+@@ -49,86 +34,8 @@
LONGINT ByteCount;
# endif
{
-+# ifdef __FreeBSD__
+- tBlockPtr BlockPtr, CurrentBlock, PreviousBlock, BestBlock, PredecessorBlock;
+- CARDINAL ChainNumber;
+- LONGINT CurrentBlockSize, BestBlockSize;
+- tLargeBlockRange j;
+-
+- ByteCount = (LONGINT)((BITSET)(ByteCount + General_MaxAlign - 1) & General_AlignMasks.A[General_MaxAlign]);
+- if (ByteCount <= MaxSizeSmallBlock) {
+- if (ByteCount == 0) {
+- ByteCount = General_Max((LONGINT)MinSizeSmallBlock, General_MaxAlign);
+- }
+- if (SmallChain.A[ByteCount - 4] != NIL) {
+- BlockPtr = (tBlockPtr)SmallChain.A[ByteCount - 4];
+- SmallChain.A[ByteCount - 4] = (ADDRESS)BlockPtr->Successor;
+- return (ADDRESS)BlockPtr;
+- } else {
+- if ((LONGINT)(PoolEndPtr - (LONGCARD)PoolFreePtr) < ByteCount) {
+- if ((LONGCARD)(PoolEndPtr - (LONGCARD)PoolFreePtr) >= MinSizeSmallBlock) {
+- rMemory_Free((LONGINT)(PoolEndPtr - (LONGCARD)PoolFreePtr), PoolFreePtr);
+- }
+- PoolFreePtr = rMemory_Alloc((LONGINT)PoolSize);
+- PoolEndPtr = PoolFreePtr + PoolSize;
+- }
+- INC1(PoolFreePtr, (LONGCARD)(ADDRESS)ByteCount);
+- return PoolFreePtr - (LONGCARD)(ADDRESS)ByteCount;
+- }
+- } else {
+- ChainNumber = General_Log2(ByteCount);
+- CurrentBlock = (tBlockPtr)LargeChain.A[ChainNumber - 6];
+- PreviousBlock = (tBlockPtr)ADR(LargeChain.A[ChainNumber - 6]);
+- BestBlock = NIL;
+- BestBlockSize = 1000000000;
+- while (CurrentBlock != NIL) {
+- CurrentBlockSize = CurrentBlock->Size;
+- if (CurrentBlockSize >= ByteCount) {
+- if (CurrentBlockSize == ByteCount) {
+- PreviousBlock->Successor = CurrentBlock->Successor;
+- return (ADDRESS)CurrentBlock;
+- }
+- if (CurrentBlockSize < BestBlockSize) {
+- BestBlock = CurrentBlock;
+- BestBlockSize = CurrentBlockSize;
+- PredecessorBlock = PreviousBlock;
+- }
+- }
+- PreviousBlock = CurrentBlock;
+- CurrentBlock = CurrentBlock->Successor;
+- }
+- if (BestBlock != NIL) {
+- PredecessorBlock->Successor = BestBlock->Successor;
+- if (BestBlockSize - ByteCount >= MinSizeSmallBlock) {
+- rMemory_Free(BestBlockSize - ByteCount, (ADDRESS)BestBlock + (LONGCARD)(ADDRESS)ByteCount);
+- }
+- return (ADDRESS)BestBlock;
+- }
+- for (j = ChainNumber + 1; j <= MaxSizeLargeBlockLog; j += 1) {
+- CurrentBlock = (tBlockPtr)LargeChain.A[j - 6];
+- if (CurrentBlock != NIL) {
+- LargeChain.A[j - 6] = (ADDRESS)CurrentBlock->Successor;
+- if (CurrentBlock->Size - ByteCount >= MinSizeSmallBlock) {
+- rMemory_Free(CurrentBlock->Size - ByteCount, (ADDRESS)CurrentBlock + (LONGCARD)(ADDRESS)ByteCount);
+- }
+- return (ADDRESS)CurrentBlock;
+- }
+- }
+- if (ByteCount < PoolSize) {
+- if ((LONGINT)(PoolEndPtr - (LONGCARD)PoolFreePtr) < ByteCount) {
+- if ((LONGCARD)(PoolEndPtr - (LONGCARD)PoolFreePtr) >= MinSizeSmallBlock) {
+- rMemory_Free((LONGINT)(PoolEndPtr - (LONGCARD)PoolFreePtr), PoolFreePtr);
+- }
+- PoolFreePtr = rMemory_Alloc((LONGINT)PoolSize);
+- PoolEndPtr = PoolFreePtr + PoolSize;
+- }
+- INC1(PoolFreePtr, (LONGCARD)(ADDRESS)ByteCount);
+- return PoolFreePtr - (LONGCARD)(ADDRESS)ByteCount;
+- } else {
+- BlockPtr = (tBlockPtr)rAlloc(ByteCount);
+- INC1(rMemory_MemoryUsed, ByteCount);
+- return (ADDRESS)BlockPtr;
+- }
+- }
+ /* FreeBSD is suppossed to have its own proper memory manager */
+ return (ADDRESS)calloc(1,ByteCount);
-+# else
- tBlockPtr BlockPtr, CurrentBlock, PreviousBlock, BestBlock, PredecessorBlock;
- CARDINAL ChainNumber;
- LONGINT CurrentBlockSize, BestBlockSize;
-@@ -129,6 +133,7 @@
- return (ADDRESS)BlockPtr;
- }
- }
-+#endif
}
void rMemory_Free
-@@ -140,6 +145,9 @@
+@@ -140,23 +47,7 @@
ADDRESS a;
# endif
{
-+#ifdef __FREEBSD__
+- tBlockPtr BlockPtr;
+- tLargeBlockRange ChainNumber;
+-
+- ByteCount = (LONGINT)((BITSET)(ByteCount + General_MaxAlign - 1) & General_AlignMasks.A[General_MaxAlign]);
+- BlockPtr = (tBlockPtr)a;
+- if (ByteCount <= MaxSizeSmallBlock) {
+- if (ByteCount == 0) {
+- ByteCount = General_Max((LONGINT)MinSizeSmallBlock, General_MaxAlign);
+- }
+- BlockPtr->Successor = (tBlockPtr)SmallChain.A[ByteCount - 4];
+- SmallChain.A[ByteCount - 4] = (ADDRESS)BlockPtr;
+- } else {
+- ChainNumber = General_Log2(ByteCount);
+- BlockPtr->Successor = (tBlockPtr)LargeChain.A[ChainNumber - 6];
+- BlockPtr->Size = ByteCount;
+- LargeChain.A[ChainNumber - 6] = (ADDRESS)BlockPtr;
+- }
+ free(a);
-+#else
- tBlockPtr BlockPtr;
- tLargeBlockRange ChainNumber;
-
-@@ -157,6 +165,7 @@
- BlockPtr->Size = ByteCount;
- LargeChain.A[ChainNumber - 6] = (ADDRESS)BlockPtr;
- }
-+#endif
}
void BEGIN_rMemory()
+@@ -168,12 +59,6 @@
+ BEGIN_rSystem();
+ BEGIN_IO();
+
+- for (i = MinSizeSmallBlock; i <= MaxSizeSmallBlock; i += 2) {
+- SmallChain.A[i - 4] = (ADDRESS)NIL;
+- }
+- for (j = MinSizeLargeBlockLog; j <= MaxSizeLargeBlockLog; j += 1) {
+- LargeChain.A[j - 6] = (ADDRESS)NIL;
+- }
+ PoolFreePtr = (ADDRESS)NIL;
+ PoolEndPtr = (ADDRESS)NIL;
+ rMemory_MemoryUsed = 0;