Skip to content

Commit 6b57e7b

Browse files
committed
Use shorter form of inline macro
1 parent c289106 commit 6b57e7b

File tree

1 file changed

+45
-43
lines changed

1 file changed

+45
-43
lines changed

tlsf.c

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010

1111
#include "tlsf.h"
1212

13+
#ifndef UNLIKELY
1314
#define UNLIKELY(x) __builtin_expect(!!(x), false)
15+
#endif
1416

1517
/* All allocation sizes and addresses are aligned. */
1618
#define ALIGN_SIZE ((size_t) 1 << ALIGN_SHIFT)
@@ -46,8 +48,8 @@
4648
#endif
4749
#endif
4850

49-
#ifndef TLSF_INL
50-
#define TLSF_INL static inline __attribute__((always_inline))
51+
#ifndef INLINE
52+
#define INLINE static inline __attribute__((always_inline))
5153
#endif
5254

5355
typedef struct tlsf_block_ tlsf_block;
@@ -82,14 +84,14 @@ _Static_assert(SL_COUNT <= 32, "index too large");
8284
_Static_assert(FL_COUNT == _TLSF_FL_COUNT, "invalid level configuration");
8385
_Static_assert(SL_COUNT == _TLSF_SL_COUNT, "invalid level configuration");
8486

85-
TLSF_INL uint32_t bitmap_ffs(uint32_t x)
87+
INLINE uint32_t bitmap_ffs(uint32_t x)
8688
{
8789
uint32_t i = (uint32_t) __builtin_ffs((int32_t) x);
8890
TLSF_ASSERT(i, "no set bit found");
8991
return i - 1U;
9092
}
9193

92-
TLSF_INL uint32_t log2floor(size_t x)
94+
INLINE uint32_t log2floor(size_t x)
9395
{
9496
TLSF_ASSERT(x > 0, "log2 of zero");
9597
return sizeof(size_t) == 8
@@ -98,50 +100,50 @@ TLSF_INL uint32_t log2floor(size_t x)
98100
: (uint32_t) (31 - (uint32_t) __builtin_clzl((unsigned long) x));
99101
}
100102

101-
TLSF_INL size_t block_size(const tlsf_block *block)
103+
INLINE size_t block_size(const tlsf_block *block)
102104
{
103105
return block->header & ~BLOCK_BITS;
104106
}
105107

106-
TLSF_INL void block_set_size(tlsf_block *block, size_t size)
108+
INLINE void block_set_size(tlsf_block *block, size_t size)
107109
{
108110
TLSF_ASSERT(!(size % ALIGN_SIZE), "invalid size");
109111
block->header = size | (block->header & BLOCK_BITS);
110112
}
111113

112-
TLSF_INL bool block_is_free(const tlsf_block *block)
114+
INLINE bool block_is_free(const tlsf_block *block)
113115
{
114116
return !!(block->header & BLOCK_BIT_FREE);
115117
}
116118

117-
TLSF_INL bool block_is_prev_free(const tlsf_block *block)
119+
INLINE bool block_is_prev_free(const tlsf_block *block)
118120
{
119121
return !!(block->header & BLOCK_BIT_PREV_FREE);
120122
}
121123

122-
TLSF_INL void block_set_prev_free(tlsf_block *block, bool free)
124+
INLINE void block_set_prev_free(tlsf_block *block, bool free)
123125
{
124126
block->header = free ? block->header | BLOCK_BIT_PREV_FREE
125127
: block->header & ~BLOCK_BIT_PREV_FREE;
126128
}
127129

128-
TLSF_INL size_t align_up(size_t x, size_t align)
130+
INLINE size_t align_up(size_t x, size_t align)
129131
{
130132
TLSF_ASSERT(!(align & (align - 1)), "must align to a power of two");
131133
return (x + (align - 1)) & ~(align - 1);
132134
}
133135

134-
TLSF_INL char *align_ptr(char *p, size_t align)
136+
INLINE char *align_ptr(char *p, size_t align)
135137
{
136138
return (char *) align_up((size_t) p, align);
137139
}
138140

139-
TLSF_INL char *block_payload(tlsf_block *block)
141+
INLINE char *block_payload(tlsf_block *block)
140142
{
141143
return (char *) block + offsetof(tlsf_block, header) + BLOCK_OVERHEAD;
142144
}
143145

144-
TLSF_INL tlsf_block *to_block(void *ptr)
146+
INLINE tlsf_block *to_block(void *ptr)
145147
{
146148
tlsf_block *block = (tlsf_block *) ptr;
147149
TLSF_ASSERT(
@@ -150,21 +152,21 @@ TLSF_INL tlsf_block *to_block(void *ptr)
150152
return block;
151153
}
152154

153-
TLSF_INL tlsf_block *block_from_payload(void *ptr)
155+
INLINE tlsf_block *block_from_payload(void *ptr)
154156
{
155157
return to_block((char *) ptr - offsetof(tlsf_block, header) -
156158
BLOCK_OVERHEAD);
157159
}
158160

159161
/* Return location of previous block. */
160-
TLSF_INL tlsf_block *block_prev(const tlsf_block *block)
162+
INLINE tlsf_block *block_prev(const tlsf_block *block)
161163
{
162164
TLSF_ASSERT(block_is_prev_free(block), "previous block must be free");
163165
return block->prev;
164166
}
165167

166168
/* Return location of next existing block. */
167-
TLSF_INL tlsf_block *block_next(tlsf_block *block)
169+
INLINE tlsf_block *block_next(tlsf_block *block)
168170
{
169171
tlsf_block *next =
170172
to_block(block_payload(block) + block_size(block) - BLOCK_OVERHEAD);
@@ -173,19 +175,19 @@ TLSF_INL tlsf_block *block_next(tlsf_block *block)
173175
}
174176

175177
/* Link a new block with its neighbor, return the neighbor. */
176-
TLSF_INL tlsf_block *block_link_next(tlsf_block *block)
178+
INLINE tlsf_block *block_link_next(tlsf_block *block)
177179
{
178180
tlsf_block *next = block_next(block);
179181
next->prev = block;
180182
return next;
181183
}
182184

183-
TLSF_INL bool block_can_split(tlsf_block *block, size_t size)
185+
INLINE bool block_can_split(tlsf_block *block, size_t size)
184186
{
185187
return block_size(block) >= sizeof(tlsf_block) + size;
186188
}
187189

188-
TLSF_INL void block_set_free(tlsf_block *block, bool free)
190+
INLINE void block_set_free(tlsf_block *block, bool free)
189191
{
190192
TLSF_ASSERT(block_is_free(block) != free, "block free bit unchanged");
191193
block->header =
@@ -195,20 +197,20 @@ TLSF_INL void block_set_free(tlsf_block *block, bool free)
195197

196198
/* Adjust allocation size to be aligned, and no smaller than internal minimum.
197199
*/
198-
TLSF_INL size_t adjust_size(size_t size, size_t align)
200+
INLINE size_t adjust_size(size_t size, size_t align)
199201
{
200202
size = align_up(size, align);
201203
return size < BLOCK_SIZE_MIN ? BLOCK_SIZE_MIN : size;
202204
}
203205

204206
/* Round up to the next block size */
205-
TLSF_INL size_t round_block_size(size_t size)
207+
INLINE size_t round_block_size(size_t size)
206208
{
207209
size_t t = ((size_t) 1 << (log2floor(size) - SL_SHIFT)) - 1;
208210
return size >= BLOCK_SIZE_SMALL ? (size + t) & ~t : size;
209211
}
210212

211-
TLSF_INL void mapping(size_t size, uint32_t *fl, uint32_t *sl)
213+
INLINE void mapping(size_t size, uint32_t *fl, uint32_t *sl)
212214
{
213215
if (size < BLOCK_SIZE_SMALL) {
214216
/* Store small blocks in first list. */
@@ -223,7 +225,7 @@ TLSF_INL void mapping(size_t size, uint32_t *fl, uint32_t *sl)
223225
TLSF_ASSERT(*sl < SL_COUNT, "wrong second level");
224226
}
225227

226-
TLSF_INL tlsf_block *block_find_suitable(tlsf *t, uint32_t *fl, uint32_t *sl)
228+
INLINE tlsf_block *block_find_suitable(tlsf *t, uint32_t *fl, uint32_t *sl)
227229
{
228230
TLSF_ASSERT(*fl < FL_COUNT, "wrong first level");
229231
TLSF_ASSERT(*sl < SL_COUNT, "wrong second level");
@@ -252,10 +254,10 @@ TLSF_INL tlsf_block *block_find_suitable(tlsf *t, uint32_t *fl, uint32_t *sl)
252254
}
253255

254256
/* Remove a free block from the free list. */
255-
TLSF_INL void remove_free_block(tlsf *t,
256-
tlsf_block *block,
257-
uint32_t fl,
258-
uint32_t sl)
257+
INLINE void remove_free_block(tlsf *t,
258+
tlsf_block *block,
259+
uint32_t fl,
260+
uint32_t sl)
259261
{
260262
TLSF_ASSERT(fl < FL_COUNT, "wrong first level");
261263
TLSF_ASSERT(sl < SL_COUNT, "wrong second level");
@@ -283,10 +285,10 @@ TLSF_INL void remove_free_block(tlsf *t,
283285
}
284286

285287
/* Insert a free block into the free block list and mark the bitmaps. */
286-
TLSF_INL void insert_free_block(tlsf *t,
287-
tlsf_block *block,
288-
uint32_t fl,
289-
uint32_t sl)
288+
INLINE void insert_free_block(tlsf *t,
289+
tlsf_block *block,
290+
uint32_t fl,
291+
uint32_t sl)
290292
{
291293
tlsf_block *current = t->block[fl][sl];
292294
TLSF_ASSERT(block, "cannot insert a null entry into the free list");
@@ -300,23 +302,23 @@ TLSF_INL void insert_free_block(tlsf *t,
300302
}
301303

302304
/* Remove a given block from the free list. */
303-
TLSF_INL void block_remove(tlsf *t, tlsf_block *block)
305+
INLINE void block_remove(tlsf *t, tlsf_block *block)
304306
{
305307
uint32_t fl, sl;
306308
mapping(block_size(block), &fl, &sl);
307309
remove_free_block(t, block, fl, sl);
308310
}
309311

310312
/* Insert a given block into the free list. */
311-
TLSF_INL void block_insert(tlsf *t, tlsf_block *block)
313+
INLINE void block_insert(tlsf *t, tlsf_block *block)
312314
{
313315
uint32_t fl, sl;
314316
mapping(block_size(block), &fl, &sl);
315317
insert_free_block(t, block, fl, sl);
316318
}
317319

318320
/* Split a block into two, the second of which is free. */
319-
TLSF_INL tlsf_block *block_split(tlsf_block *block, size_t size)
321+
INLINE tlsf_block *block_split(tlsf_block *block, size_t size)
320322
{
321323
tlsf_block *rest = to_block(block_payload(block) + size - BLOCK_OVERHEAD);
322324
size_t rest_size = block_size(block) - (size + BLOCK_OVERHEAD);
@@ -331,7 +333,7 @@ TLSF_INL tlsf_block *block_split(tlsf_block *block, size_t size)
331333
}
332334

333335
/* Absorb a free block's storage into an adjacent previous free block. */
334-
TLSF_INL tlsf_block *block_absorb(tlsf_block *prev, tlsf_block *block)
336+
INLINE tlsf_block *block_absorb(tlsf_block *prev, tlsf_block *block)
335337
{
336338
TLSF_ASSERT(block_size(prev), "previous block can't be last");
337339
/* Note: Leaves flags untouched. */
@@ -341,7 +343,7 @@ TLSF_INL tlsf_block *block_absorb(tlsf_block *prev, tlsf_block *block)
341343
}
342344

343345
/* Merge a just-freed block with an adjacent previous free block. */
344-
TLSF_INL tlsf_block *block_merge_prev(tlsf *t, tlsf_block *block)
346+
INLINE tlsf_block *block_merge_prev(tlsf *t, tlsf_block *block)
345347
{
346348
if (block_is_prev_free(block)) {
347349
tlsf_block *prev = block_prev(block);
@@ -355,7 +357,7 @@ TLSF_INL tlsf_block *block_merge_prev(tlsf *t, tlsf_block *block)
355357
}
356358

357359
/* Merge a just-freed block with an adjacent free block. */
358-
TLSF_INL tlsf_block *block_merge_next(tlsf *t, tlsf_block *block)
360+
INLINE tlsf_block *block_merge_next(tlsf *t, tlsf_block *block)
359361
{
360362
tlsf_block *next = block_next(block);
361363
TLSF_ASSERT(next, "next block can't be null");
@@ -368,7 +370,7 @@ TLSF_INL tlsf_block *block_merge_next(tlsf *t, tlsf_block *block)
368370
}
369371

370372
/* Trim any trailing block space off the end of a block, return to pool. */
371-
TLSF_INL void block_rtrim_free(tlsf *t, tlsf_block *block, size_t size)
373+
INLINE void block_rtrim_free(tlsf *t, tlsf_block *block, size_t size)
372374
{
373375
TLSF_ASSERT(block_is_free(block), "block must be free");
374376
if (block_can_split(block, size)) {
@@ -380,7 +382,7 @@ TLSF_INL void block_rtrim_free(tlsf *t, tlsf_block *block, size_t size)
380382
}
381383

382384
/* Trim any trailing block space off the end of a used block, return to pool. */
383-
TLSF_INL void block_rtrim_used(tlsf *t, tlsf_block *block, size_t size)
385+
INLINE void block_rtrim_used(tlsf *t, tlsf_block *block, size_t size)
384386
{
385387
TLSF_ASSERT(!block_is_free(block), "block must be used");
386388
if (block_can_split(block, size)) {
@@ -391,7 +393,7 @@ TLSF_INL void block_rtrim_used(tlsf *t, tlsf_block *block, size_t size)
391393
}
392394
}
393395

394-
TLSF_INL tlsf_block *block_ltrim_free(tlsf *t, tlsf_block *block, size_t size)
396+
INLINE tlsf_block *block_ltrim_free(tlsf *t, tlsf_block *block, size_t size)
395397
{
396398
TLSF_ASSERT(block_is_free(block), "block must be free");
397399
TLSF_ASSERT(block_can_split(block, size), "block is too small");
@@ -402,14 +404,14 @@ TLSF_INL tlsf_block *block_ltrim_free(tlsf *t, tlsf_block *block, size_t size)
402404
return rest;
403405
}
404406

405-
TLSF_INL void *block_use(tlsf *t, tlsf_block *block, size_t size)
407+
INLINE void *block_use(tlsf *t, tlsf_block *block, size_t size)
406408
{
407409
block_rtrim_free(t, block, size);
408410
block_set_free(block, false);
409411
return block_payload(block);
410412
}
411413

412-
TLSF_INL void check_sentinel(tlsf_block *block)
414+
INLINE void check_sentinel(tlsf_block *block)
413415
{
414416
(void) block;
415417
TLSF_ASSERT(!block_size(block), "sentinel should be last");
@@ -457,7 +459,7 @@ static void arena_shrink(tlsf *t, tlsf_block *block)
457459
}
458460
}
459461

460-
TLSF_INL tlsf_block *block_find_free(tlsf *t, size_t size)
462+
INLINE tlsf_block *block_find_free(tlsf *t, size_t size)
461463
{
462464
size_t rounded = round_block_size(size);
463465
uint32_t fl, sl;

0 commit comments

Comments
 (0)