xref: /freebsd/contrib/jemalloc/include/jemalloc/internal/quantum.h (revision c43cad87172039ccf38172129c79755ea79e6102)
1 #ifndef JEMALLOC_INTERNAL_QUANTUM_H
2 #define JEMALLOC_INTERNAL_QUANTUM_H
3 
4 /*
5  * Minimum allocation alignment is 2^LG_QUANTUM bytes (ignoring tiny size
6  * classes).
7  */
8 #ifndef LG_QUANTUM
9 #  if (defined(__i386__) || defined(_M_IX86))
10 #    define LG_QUANTUM		4
11 #  endif
12 #  ifdef __ia64__
13 #    define LG_QUANTUM		4
14 #  endif
15 #  ifdef __alpha__
16 #    define LG_QUANTUM		4
17 #  endif
18 #  if (defined(__sparc64__) || defined(__sparcv9) || defined(__sparc_v9__))
19 #    define LG_QUANTUM		4
20 #  endif
21 #  if (defined(__amd64__) || defined(__x86_64__) || defined(_M_X64))
22 #    define LG_QUANTUM		4
23 #  endif
24 #  ifdef __arm__
25 #    define LG_QUANTUM		3
26 #  endif
27 #  ifdef __aarch64__
28 #    define LG_QUANTUM		4
29 #  endif
30 #  ifdef __hppa__
31 #    define LG_QUANTUM		4
32 #  endif
33 #  ifdef __loongarch__
34 #    define LG_QUANTUM		4
35 #  endif
36 #  ifdef __m68k__
37 #    define LG_QUANTUM		3
38 #  endif
39 #  ifdef __mips__
40 #    if defined(__mips_n32) || defined(__mips_n64)
41 #      define LG_QUANTUM		4
42 #    else
43 #      define LG_QUANTUM		3
44 #    endif
45 #  endif
46 #  ifdef __nios2__
47 #    define LG_QUANTUM		3
48 #  endif
49 #  ifdef __or1k__
50 #    define LG_QUANTUM		3
51 #  endif
52 #  ifdef __powerpc__
53 #    define LG_QUANTUM		4
54 #  endif
55 #  if defined(__riscv) || defined(__riscv__)
56 #    define LG_QUANTUM		4
57 #  endif
58 #  ifdef __s390__
59 #    define LG_QUANTUM		4
60 #  endif
61 #  if (defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || \
62 	defined(__SH4_SINGLE_ONLY__))
63 #    define LG_QUANTUM		4
64 #  endif
65 #  ifdef __tile__
66 #    define LG_QUANTUM		4
67 #  endif
68 #  ifdef __le32__
69 #    define LG_QUANTUM		4
70 #  endif
71 #  ifdef __arc__
72 #    define LG_QUANTUM		3
73 #  endif
74 #  ifndef LG_QUANTUM
75 #    error "Unknown minimum alignment for architecture; specify via "
76 	 "--with-lg-quantum"
77 #  endif
78 #endif
79 
80 #define QUANTUM			((size_t)(1U << LG_QUANTUM))
81 #define QUANTUM_MASK		(QUANTUM - 1)
82 
83 /* Return the smallest quantum multiple that is >= a. */
84 #define QUANTUM_CEILING(a)						\
85 	(((a) + QUANTUM_MASK) & ~QUANTUM_MASK)
86 
87 #endif /* JEMALLOC_INTERNAL_QUANTUM_H */
88