xref: /netbsd-src/external/bsd/jemalloc.old/dist/src/sz.c (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
1*8e33eff8Schristos #include "jemalloc/internal/jemalloc_preamble.h"
2*8e33eff8Schristos #include "jemalloc/internal/sz.h"
3*8e33eff8Schristos 
4*8e33eff8Schristos JEMALLOC_ALIGNED(CACHELINE)
5*8e33eff8Schristos const size_t sz_pind2sz_tab[NPSIZES+1] = {
6*8e33eff8Schristos #define PSZ_yes(lg_grp, ndelta, lg_delta)				\
7*8e33eff8Schristos 	(((ZU(1)<<lg_grp) + (ZU(ndelta)<<lg_delta))),
8*8e33eff8Schristos #define PSZ_no(lg_grp, ndelta, lg_delta)
9*8e33eff8Schristos #define SC(index, lg_grp, lg_delta, ndelta, psz, bin, pgs, lg_delta_lookup) \
10*8e33eff8Schristos 	PSZ_##psz(lg_grp, ndelta, lg_delta)
11*8e33eff8Schristos 	SIZE_CLASSES
12*8e33eff8Schristos #undef PSZ_yes
13*8e33eff8Schristos #undef PSZ_no
14*8e33eff8Schristos #undef SC
15*8e33eff8Schristos 	(LARGE_MAXCLASS + PAGE)
16*8e33eff8Schristos };
17*8e33eff8Schristos 
18*8e33eff8Schristos JEMALLOC_ALIGNED(CACHELINE)
19*8e33eff8Schristos const size_t sz_index2size_tab[NSIZES] = {
20*8e33eff8Schristos #define SC(index, lg_grp, lg_delta, ndelta, psz, bin, pgs, lg_delta_lookup) \
21*8e33eff8Schristos 	((ZU(1)<<lg_grp) + (ZU(ndelta)<<lg_delta)),
22*8e33eff8Schristos 	SIZE_CLASSES
23*8e33eff8Schristos #undef SC
24*8e33eff8Schristos };
25*8e33eff8Schristos 
26*8e33eff8Schristos JEMALLOC_ALIGNED(CACHELINE)
27*8e33eff8Schristos const uint8_t sz_size2index_tab[] = {
28*8e33eff8Schristos #if LG_TINY_MIN == 0
29*8e33eff8Schristos /* The div module doesn't support division by 1. */
30*8e33eff8Schristos #error "Unsupported LG_TINY_MIN"
31*8e33eff8Schristos #define S2B_0(i)	i,
32*8e33eff8Schristos #elif LG_TINY_MIN == 1
33*8e33eff8Schristos #warning "Dangerous LG_TINY_MIN"
34*8e33eff8Schristos #define S2B_1(i)	i,
35*8e33eff8Schristos #elif LG_TINY_MIN == 2
36*8e33eff8Schristos #warning "Dangerous LG_TINY_MIN"
37*8e33eff8Schristos #define S2B_2(i)	i,
38*8e33eff8Schristos #elif LG_TINY_MIN == 3
39*8e33eff8Schristos #define S2B_3(i)	i,
40*8e33eff8Schristos #elif LG_TINY_MIN == 4
41*8e33eff8Schristos #define S2B_4(i)	i,
42*8e33eff8Schristos #elif LG_TINY_MIN == 5
43*8e33eff8Schristos #define S2B_5(i)	i,
44*8e33eff8Schristos #elif LG_TINY_MIN == 6
45*8e33eff8Schristos #define S2B_6(i)	i,
46*8e33eff8Schristos #elif LG_TINY_MIN == 7
47*8e33eff8Schristos #define S2B_7(i)	i,
48*8e33eff8Schristos #elif LG_TINY_MIN == 8
49*8e33eff8Schristos #define S2B_8(i)	i,
50*8e33eff8Schristos #elif LG_TINY_MIN == 9
51*8e33eff8Schristos #define S2B_9(i)	i,
52*8e33eff8Schristos #elif LG_TINY_MIN == 10
53*8e33eff8Schristos #define S2B_10(i)	i,
54*8e33eff8Schristos #elif LG_TINY_MIN == 11
55*8e33eff8Schristos #define S2B_11(i)	i,
56*8e33eff8Schristos #else
57*8e33eff8Schristos #error "Unsupported LG_TINY_MIN"
58*8e33eff8Schristos #endif
59*8e33eff8Schristos #if LG_TINY_MIN < 1
60*8e33eff8Schristos #define S2B_1(i)	S2B_0(i) S2B_0(i)
61*8e33eff8Schristos #endif
62*8e33eff8Schristos #if LG_TINY_MIN < 2
63*8e33eff8Schristos #define S2B_2(i)	S2B_1(i) S2B_1(i)
64*8e33eff8Schristos #endif
65*8e33eff8Schristos #if LG_TINY_MIN < 3
66*8e33eff8Schristos #define S2B_3(i)	S2B_2(i) S2B_2(i)
67*8e33eff8Schristos #endif
68*8e33eff8Schristos #if LG_TINY_MIN < 4
69*8e33eff8Schristos #define S2B_4(i)	S2B_3(i) S2B_3(i)
70*8e33eff8Schristos #endif
71*8e33eff8Schristos #if LG_TINY_MIN < 5
72*8e33eff8Schristos #define S2B_5(i)	S2B_4(i) S2B_4(i)
73*8e33eff8Schristos #endif
74*8e33eff8Schristos #if LG_TINY_MIN < 6
75*8e33eff8Schristos #define S2B_6(i)	S2B_5(i) S2B_5(i)
76*8e33eff8Schristos #endif
77*8e33eff8Schristos #if LG_TINY_MIN < 7
78*8e33eff8Schristos #define S2B_7(i)	S2B_6(i) S2B_6(i)
79*8e33eff8Schristos #endif
80*8e33eff8Schristos #if LG_TINY_MIN < 8
81*8e33eff8Schristos #define S2B_8(i)	S2B_7(i) S2B_7(i)
82*8e33eff8Schristos #endif
83*8e33eff8Schristos #if LG_TINY_MIN < 9
84*8e33eff8Schristos #define S2B_9(i)	S2B_8(i) S2B_8(i)
85*8e33eff8Schristos #endif
86*8e33eff8Schristos #if LG_TINY_MIN < 10
87*8e33eff8Schristos #define S2B_10(i)	S2B_9(i) S2B_9(i)
88*8e33eff8Schristos #endif
89*8e33eff8Schristos #if LG_TINY_MIN < 11
90*8e33eff8Schristos #define S2B_11(i)	S2B_10(i) S2B_10(i)
91*8e33eff8Schristos #endif
92*8e33eff8Schristos #define S2B_no(i)
93*8e33eff8Schristos #define SC(index, lg_grp, lg_delta, ndelta, psz, bin, pgs, lg_delta_lookup) \
94*8e33eff8Schristos 	S2B_##lg_delta_lookup(index)
95*8e33eff8Schristos 	SIZE_CLASSES
96*8e33eff8Schristos #undef S2B_3
97*8e33eff8Schristos #undef S2B_4
98*8e33eff8Schristos #undef S2B_5
99*8e33eff8Schristos #undef S2B_6
100*8e33eff8Schristos #undef S2B_7
101*8e33eff8Schristos #undef S2B_8
102*8e33eff8Schristos #undef S2B_9
103*8e33eff8Schristos #undef S2B_10
104*8e33eff8Schristos #undef S2B_11
105*8e33eff8Schristos #undef S2B_no
106*8e33eff8Schristos #undef SC
107*8e33eff8Schristos };
108