My Project
Loading...
Searching...
No Matches
omTables.c
Go to the documentation of this file.
1/*******************************************************************
2 * File: omTables.c
3 * Purpose: program which generates omTables.inc
4 * Author: obachman (Olaf Bachmann)
5 * Created: 11/99
6 *******************************************************************/
7
8#ifndef MH_TABLES_C
9#define MH_TABLES_C
10
11#define _POSIX_SOURCE 1
12
13#include <stdio.h>
14#include <unistd.h>
15#include <string.h>
16#include "omalloc/omConfig.h"
17#include "omalloc/omDerivedConfig.h"
18#include "omalloc/omStructs.h"
20
21/* Specify the minimal number of blocks which should go into a bin */
22#if SIZEOF_SYSTEM_PAGE > 4096
23#define MIN_BIN_BLOCKS 8
24#define INCR_FACTOR 2
25#else
26#define MIN_BIN_BLOCKS 4
27#define INCR_FACTOR 1
28#endif
29
30
31#define OM_MAX_BLOCK_SIZE ((SIZEOF_OM_BIN_PAGE / MIN_BIN_BLOCKS) & ~(SIZEOF_STRICT_ALIGNMENT - 1))
32
33/* Specify sizes of static bins */
34#ifdef OM_ALIGN_8
35
37{ 8, 16, 24, 32,
38 40, 48, 56, 64, 72,
39 80, 96, 112, 128, 144,
40 160, 192, 224,
47
48#else /* ! OM_ALIGN_8 */
49
62
63#endif /* OM_ALIGN_8 */
64
65void OutputSize2Bin(size_t *binSize, size_t max_block_size, int track)
66{
67 long i, j;
68 printf("omBin om_Size2%sBin[/*%ld*/] = {\n",
69 (track? "Track" : ""), (long)(max_block_size / SIZEOF_OM_ALIGNMENT));
70 i=0;
72 while (j < max_block_size)
73 {
74 printf("&om_Static%sBin[%ld], /* %ld */ \n", (track? "Track" : ""), i, j);
75 if (binSize[i] == j) i++;
77 }
78 printf("&om_Static%sBin[%ld] /* %ld */};\n\n", (track? "Track" : ""), i, j);
79}
80
82{
83 long i, j;
84 if (OM_MAX_BLOCK_SIZE % 8 != 0)
85 {
86 fprintf(stderr, "OM_MAX_BLOCK_SIZE == %d not divisible by 8\n", OM_MAX_BLOCK_SIZE);fflush(stdout);
87 _exit(1);
88 }
89 printf("omBin om_Size2%sBin[/*%ld*/] = {\n",
90 (track ? "Track" : "Aligned"), (long)(max_block_size / SIZEOF_OM_ALIGNMENT));
91 i=0;
92 while (binSize[i] % SIZEOF_STRICT_ALIGNMENT != 0) i++;
94 while (j < max_block_size)
95 {
96 printf("&om_Static%sBin[%ld], /* %ld */ \n", (track ? "Track" : ""), i, j);
97 if (binSize[i] == j)
98 {
99 i++;
100 while (binSize[i] % SIZEOF_STRICT_ALIGNMENT != 0) i++;
101 }
103 }
104 printf("&om_Static%sBin[%ld] /* %ld */};\n\n", (track ? "Track" : ""), i, j);
105}
106
108{
109 long i;
110 printf("omBin_t om_Static%sBin[/*%d*/] = {\n", (track ? "Track" : ""), max_bin_index+1);
111
112 for (i=0; i< max_bin_index; i++)
113 {
114 printf("{om_ZeroPage, NULL, NULL, %ld, %ld, 0},\n",
115 (long)(binSize[i] / SIZEOF_LONG),
116 (long)(SIZEOF_OM_BIN_PAGE/binSize[i]));
117 }
118 printf("{om_ZeroPage, NULL, NULL, %ld, %ld, 0}\n};\n\n",
119 (long)(binSize[i] / SIZEOF_LONG),
120 (long)(SIZEOF_OM_BIN_PAGE/binSize[i]));
121}
122
124{
125 int i;
127 {
129 return i;
130 }
131 /* should never get here */
132 printf("error");fflush(stdout);
133 _exit(1);
134}
135
137{
139 int i = 1;
140#ifdef OM_ALIGNMENT_NEEDS_WORK
141 int n = GetMaxBlockThreshold();
142#endif
143
146 i = 1;
147 while (size < OM_MAX_BLOCK_SIZE)
148 {
149 size += align_size;
150#ifdef OM_ALIGNMENT_NEEDS_WORK
152 {
155 }
156#endif
157 om_BinSize[i] = size;
159 {
160 i++;
161 }
162 }
163}
164
165int main(int argc, char* argv[])
166{
167 int max_bin_index = 0;
168 /* determine max_bin_index */
169#ifdef OM_HAVE_DENSE_BIN_DISTRIBUTION
171#endif
172 for(;;)
173 {
176 }
177
178 printf(
179"#ifndef OM_TABLES_INC\n"
180"#define OM_TABLES_INC\n"
181);
182
183 /* Output om_StaticBin */
185 /* Output om_Size2Bin */
187
188#ifdef OM_ALIGNMENT_NEEDS_WORK
190#endif
191
192 printf("\n#ifdef OM_HAVE_TRACK\n");
193 /* Output om_StaticBin */
195 /* Output om_Size2Bin */
196#ifdef OM_ALIGNMENT_NEEDS_WORK
198#else
200#endif
201 printf("\n#endif /* OM_HAVE_TRACK */\n");
202
203 printf("\n#endif /* OM_TABLES_INC */\n");
204 return 0;
205}
206#endif /* MH_TABLES_C */
int size(const CanonicalForm &f, const Variable &v)
int size ( const CanonicalForm & f, const Variable & v )
Definition cf_ops.cc:600
int i
Definition cfEzgcd.cc:132
int j
Definition facHensel.cc:110
#define SIZEOF_OM_BIN_PAGE
#define MIN_BIN_BLOCKS
Definition omTables.c:26
#define INCR_FACTOR
Definition omTables.c:27
void OutputSize2Bin(size_t *binSize, size_t max_block_size, int track)
Definition omTables.c:65
void CreateDenseBins()
Definition omTables.c:136
int GetMaxBlockThreshold()
Definition omTables.c:123
void OutputStaticBin(size_t *binSize, int max_bin_index, int track)
Definition omTables.c:107
size_t om_BinSize[SIZEOF_OM_BIN_PAGE/MIN_BIN_BLOCKS]
Definition omTables.c:50
void OutputSize2AlignedBin(size_t *binSize, size_t max_block_size, int track)
Definition omTables.c:81
#define OM_MAX_BLOCK_SIZE
Definition omTables.c:31
int main()