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 __m68k__
34 #    define LG_QUANTUM		3
35 #  endif
36 #  ifdef __mips__
37 #    define LG_QUANTUM		3
38 #  endif
39 #  ifdef __nios2__
40 #    define LG_QUANTUM		3
41 #  endif
42 #  ifdef __or1k__
43 #    define LG_QUANTUM		3
44 #  endif
45 #  ifdef __powerpc__
46 #    define LG_QUANTUM		4
47 #  endif
48 #  if defined(__riscv) || defined(__riscv__)
49 #    define LG_QUANTUM		4
50 #  endif
51 #  ifdef __s390__
52 #    define LG_QUANTUM		4
53 #  endif
54 #  if (defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || \
55 	defined(__SH4_SINGLE_ONLY__))
56 #    define LG_QUANTUM		4
57 #  endif
58 #  ifdef __tile__
59 #    define LG_QUANTUM		4
60 #  endif
61 #  ifdef __le32__
62 #    define LG_QUANTUM		4
63 #  endif
64 #  ifndef LG_QUANTUM
65 #    error "Unknown minimum alignment for architecture; specify via "
66 	 "--with-lg-quantum"
67 #  endif
68 #endif
69 
70 #define QUANTUM			((size_t)(1U << LG_QUANTUM))
71 #define QUANTUM_MASK		(QUANTUM - 1)
72 
73 /* Return the smallest quantum multiple that is >= a. */
74 #define QUANTUM_CEILING(a)						\
75 	(((a) + QUANTUM_MASK) & ~QUANTUM_MASK)
76 
77 #endif /* JEMALLOC_INTERNAL_QUANTUM_H */
78