1b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#!/bin/sh
2b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
3b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans# The following limits are chosen such that they cover all supported platforms.
4b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
58d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans# Pointer sizes.
68d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg_zarr="2 3"
78d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
88d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans# Quanta.
98d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg_qarr="3 4"
10b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
11b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans# The range of tiny size classes is [2^lg_tmin..2^(lg_q-1)].
12b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evanslg_tmin=3
13b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
148d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans# Maximum lookup size.
158d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg_kmax=12
168d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
178d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans# Page sizes.
188d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg_parr="12 13 16"
198d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
208d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans# Size class group size (number of size classes for each size doubling).
218d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg_g=2
22b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
23125b93e43fe764e46c8a89fc2f3957a4e02c92e1Jason Evanspow2() {
24b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans  e=$1
25b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans  pow2_result=1
26b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans  while [ ${e} -gt 0 ] ; do
2712a6845b6c91cf76caf3199495d76b16bba1f2feJason Evans    pow2_result=$((${pow2_result} + ${pow2_result}))
2812a6845b6c91cf76caf3199495d76b16bba1f2feJason Evans    e=$((${e} - 1))
29b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans  done
30b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans}
31b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
328d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanslg() {
338d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  x=$1
348d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_result=0
358d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  while [ ${x} -gt 1 ] ; do
368d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_result=$((${lg_result} + 1))
378d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    x=$((${x} / 2))
388d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  done
398d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans}
408d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
418d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanssize_class() {
428d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  index=$1
438d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_grp=$2
448d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_delta=$3
458d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  ndelta=$4
468d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_p=$5
478d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_kmax=$6
488d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
498d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg ${ndelta}; lg_ndelta=${lg_result}; pow2 ${lg_ndelta}
508d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  if [ ${pow2_result} -lt ${ndelta} ] ; then
518d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    rem="yes"
528d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  else
538d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    rem="no"
548d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  fi
558d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
568d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_size=${lg_grp}
578d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  if [ $((${lg_delta} + ${lg_ndelta})) -eq ${lg_grp} ] ; then
588d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_size=$((${lg_grp} + 1))
598d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  else
608d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_size=${lg_grp}
618d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    rem="yes"
628d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  fi
638d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
648d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  if [ ${lg_size} -lt ${lg_p} ] ; then
658d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    bin="yes"
668d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  else
678d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    bin="no"
688d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  fi
698d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  if [ ${lg_size} -lt ${lg_kmax} \
708d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      -o ${lg_size} -eq ${lg_kmax} -a ${rem} = "no" ] ; then
718d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_delta_lookup=${lg_delta}
728d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  else
738d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_delta_lookup="no"
748d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  fi
758d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  printf '    SC(%3d, %6d, %8d, %6d, %3s, %2s) \\\n' ${index} ${lg_grp} ${lg_delta} ${ndelta} ${bin} ${lg_delta_lookup}
768d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # Defined upon return:
778d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - lg_delta_lookup (${lg_delta} or "no")
788d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - bin ("yes" or "no")
798d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans}
808d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
818d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanssep_line() {
828d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  echo "                                               \\"
838d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans}
848d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
858d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evanssize_classes() {
868d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_z=$1
878d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_q=$2
888d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_t=$3
898d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_p=$4
908d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_g=$5
918d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
928d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  pow2 $((${lg_z} + 3)); ptr_bits=${pow2_result}
938d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  pow2 ${lg_g}; g=${pow2_result}
948d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
958d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  echo "#define	SIZE_CLASSES \\"
968d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  echo "  /* index, lg_grp, lg_delta, ndelta, bin, lg_delta_lookup */ \\"
978d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
988d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  ntbins=0
998d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  nlbins=0
1008d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_tiny_maxclass='"NA"'
1018d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  nbins=0
1028d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
1038d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # Tiny size classes.
1048d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  ndelta=0
1058d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  index=0
1068d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_grp=${lg_t}
1078d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_delta=${lg_grp}
1088d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  while [ ${lg_grp} -lt ${lg_q} ] ; do
1098d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    size_class ${index} ${lg_grp} ${lg_delta} ${ndelta} ${lg_p} ${lg_kmax}
1108d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    if [ ${lg_delta_lookup} != "no" ] ; then
1118d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      nlbins=$((${index} + 1))
1128d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    fi
1138d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    if [ ${bin} != "no" ] ; then
1148d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      nbins=$((${index} + 1))
1158d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    fi
1168d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    ntbins=$((${ntbins} + 1))
1178d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_tiny_maxclass=${lg_grp} # Final written value is correct.
1188d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    index=$((${index} + 1))
1198d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_delta=${lg_grp}
1208d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_grp=$((${lg_grp} + 1))
1218d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  done
1228d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
1238d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # First non-tiny group.
1248d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  if [ ${ntbins} -gt 0 ] ; then
1258d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    sep_line
1268d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    # The first size class has an unusual encoding, because the size has to be
1278d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    # split between grp and delta*ndelta.
1288d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_grp=$((${lg_grp} - 1))
1298d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    ndelta=1
1308d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    size_class ${index} ${lg_grp} ${lg_delta} ${ndelta} ${lg_p} ${lg_kmax}
1318d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    index=$((${index} + 1))
1328d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_grp=$((${lg_grp} + 1))
1338d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_delta=$((${lg_delta} + 1))
1348d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  fi
1358d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  while [ ${ndelta} -lt ${g} ] ; do
1368d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    size_class ${index} ${lg_grp} ${lg_delta} ${ndelta} ${lg_p} ${lg_kmax}
1378d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    index=$((${index} + 1))
1388d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    ndelta=$((${ndelta} + 1))
1398d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  done
1408d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
1418d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # All remaining groups.
1428d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  lg_grp=$((${lg_grp} + ${lg_g}))
1438d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  while [ ${lg_grp} -lt ${ptr_bits} ] ; do
1448d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    sep_line
1458d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    ndelta=1
1468d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    if [ ${lg_grp} -eq $((${ptr_bits} - 1)) ] ; then
1478d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      ndelta_limit=$((${g} - 1))
1488d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    else
1498d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      ndelta_limit=${g}
1508d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    fi
1518d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    while [ ${ndelta} -le ${ndelta_limit} ] ; do
1528d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      size_class ${index} ${lg_grp} ${lg_delta} ${ndelta} ${lg_p} ${lg_kmax}
1538d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      if [ ${lg_delta_lookup} != "no" ] ; then
1548d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        nlbins=$((${index} + 1))
1558d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        # Final written value is correct:
1568d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        lookup_maxclass="((((size_t)1) << ${lg_grp}) + (((size_t)${ndelta}) << ${lg_delta}))"
1578d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      fi
1588d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      if [ ${bin} != "no" ] ; then
1598d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        nbins=$((${index} + 1))
1608d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        # Final written value is correct:
1618d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        small_maxclass="((((size_t)1) << ${lg_grp}) + (((size_t)${ndelta}) << ${lg_delta}))"
1628d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      fi
1638d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      index=$((${index} + 1))
1648d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      ndelta=$((${ndelta} + 1))
1658d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    done
1668d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_grp=$((${lg_grp} + 1))
1678d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_delta=$((${lg_delta} + 1))
1688d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  done
1698d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  echo
1708d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
1718d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # Defined upon completion:
1728d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - ntbins
1738d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - nlbins
1748d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - nbins
1758d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - lg_tiny_maxclass
1768d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - lookup_maxclass
1778d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  # - small_maxclass
1788d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans}
1798d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
180b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evanscat <<EOF
181b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/* This file was automatically generated by size_classes.sh. */
182b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/******************************************************************************/
183b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#ifdef JEMALLOC_H_TYPES
184b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
1858d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans/*
1868d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans * This header requires LG_SIZEOF_PTR, LG_TINY_MIN, LG_QUANTUM, and LG_PAGE to
1878d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans * be defined prior to inclusion, and it in turn defines:
1888d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *
1898d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   LG_SIZE_CLASS_GROUP: Lg of size class count for each size doubling.
1908d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   SIZE_CLASSES: Complete table of
1918d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *                 SC(index, lg_delta, size, bin, lg_delta_lookup) tuples.
1928d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     index: Size class index.
1938d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     lg_grp: Lg group base size (no deltas added).
1948d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     lg_delta: Lg delta to previous size class.
1958d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     ndelta: Delta multiplier.  size == 1<<lg_grp + ndelta<<lg_delta
1968d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     bin: 'yes' if a small bin size class, 'no' otherwise.
1978d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *     lg_delta_lookup: Same as lg_delta if a lookup table size class, 'no'
1988d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *                      otherwise.
1998d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   NTBINS: Number of tiny bins.
2008d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   NLBINS: Number of bins supported by the lookup table.
2018d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   NBINS: Number of small size class bins.
2028d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   LG_TINY_MAXCLASS: Lg of maximum tiny size class.
2038d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   LOOKUP_MAXCLASS: Maximum size class included in lookup table.
2048d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans *   SMALL_MAXCLASS: Maximum small size class.
2058d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans */
2068d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
2078d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans#define	LG_SIZE_CLASS_GROUP	${lg_g}
2088d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans
209b172610317babc7f365584ddd7fdaf4eb8d9d04cJason EvansEOF
210b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
2118d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evansfor lg_z in ${lg_zarr} ; do
2128d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans  for lg_q in ${lg_qarr} ; do
2138d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    lg_t=${lg_tmin}
2148d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans    while [ ${lg_t} -le ${lg_q} ] ; do
2158d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      # Iterate through page sizes and compute how many bins there are.
2168d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      for lg_p in ${lg_parr} ; do
2178d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#if (LG_SIZEOF_PTR == ${lg_z} && LG_TINY_MIN == ${lg_t} && LG_QUANTUM == ${lg_q} && LG_PAGE == ${lg_p})"
2188d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        size_classes ${lg_z} ${lg_q} ${lg_t} ${lg_p} ${lg_g}
2198d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	SIZE_CLASSES_DEFINED"
2208d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	NTBINS			${ntbins}"
2218d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	NLBINS			${nlbins}"
2228d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	NBINS			${nbins}"
2238d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	LG_TINY_MAXCLASS	${lg_tiny_maxclass}"
2248d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	LOOKUP_MAXCLASS		${lookup_maxclass}"
2258d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#define	SMALL_MAXCLASS		${small_maxclass}"
2268d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo "#endif"
2278d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans        echo
228b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans      done
2298d8f9aeeaa77514d5732db5bd0111232af21fcfdJason Evans      lg_t=$((${lg_t} + 1))
230b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans    done
231b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans  done
232b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evansdone
233b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
234b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evanscat <<EOF
235b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#ifndef SIZE_CLASSES_DEFINED
236b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#  error "No size class definitions match configuration"
237b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif
238b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#undef SIZE_CLASSES_DEFINED
239b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/*
240b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans * The small_size2bin lookup table uses uint8_t to encode each bin index, so we
241b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans * cannot support more than 256 small size classes.  Further constrain NBINS to
2429b0cbf0850b130a9b0a8c58bd10b2926b2083510Jason Evans * 255 since all small size classes, plus a "not small" size class must be
2439b0cbf0850b130a9b0a8c58bd10b2926b2083510Jason Evans * stored in 8 bits of arena_chunk_map_t's bits field.
244b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans */
245b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#if (NBINS > 255)
246b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#  error "Too many small size classes"
247b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif
248b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
249b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif /* JEMALLOC_H_TYPES */
250b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/******************************************************************************/
251b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#ifdef JEMALLOC_H_STRUCTS
252b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
253b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
254b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif /* JEMALLOC_H_STRUCTS */
255b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/******************************************************************************/
256b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#ifdef JEMALLOC_H_EXTERNS
257b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
258b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
259b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif /* JEMALLOC_H_EXTERNS */
260b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/******************************************************************************/
261b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#ifdef JEMALLOC_H_INLINES
262b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
263b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans
264b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans#endif /* JEMALLOC_H_INLINES */
265b172610317babc7f365584ddd7fdaf4eb8d9d04cJason Evans/******************************************************************************/
266b172610317babc7f365584ddd7fdaf4eb8d9d04cJason EvansEOF
267