docs: Add supported versions and fix-backport policy
[lttng-tools.git] / src / common / align.hpp
CommitLineData
953192ba 1/*
ab5be9fa 2 * Copyright (C) 2010-2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
953192ba 3 *
ab5be9fa 4 * SPDX-License-Identifier: MIT
953192ba 5 *
953192ba
MD
6 */
7
ab5be9fa
MJ
8#ifndef _LTTNG_ALIGN_H
9#define _LTTNG_ALIGN_H
10
c9e313bc 11#include "bug.hpp"
d575a7f8 12
1cbd136b
MJ
13/*
14 * Align value to the next multiple of align. Returns val if it already is a
15 * multiple of align. Align must be a power of two.
16 */
28f23191 17#define __lttng_align_ceil_mask(v, mask) (((v) + (mask)) & ~(mask))
d575a7f8 18
28f23191 19#define lttng_align_ceil(v, align) __lttng_align_ceil_mask(v, (__typeof__(v)) (align) -1)
d4ad24a3 20
1cbd136b
MJ
21/*
22 * Align value to the previous multiple of align. Returns val if it already is a
23 * multiple of align. Align must be a power of two.
24 */
28f23191 25#define __lttng_align_floor_mask(v, mask) ((v) & ~(mask))
d4ad24a3 26
28f23191 27#define lttng_align_floor(v, align) __lttng_align_floor_mask(v, (__typeof__(v)) (align) -1)
953192ba
MD
28
29/**
1cbd136b 30 * lttng_offset_align - Calculate the offset needed to align an object on its natural
953192ba
MD
31 * alignment towards higher addresses.
32 * @align_drift: object offset from an "alignment"-aligned address.
33 * @alignment: natural object alignment. Must be non-zero, power of 2.
34 *
35 * Returns the offset that must be added to align towards higher
36 * addresses.
37 */
28f23191
JG
38#define lttng_offset_align(align_drift, alignment) \
39 ({ \
40 LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 || ((alignment) & ((alignment) -1))); \
41 (((alignment) - (align_drift)) & ((alignment) -1)); \
953192ba
MD
42 })
43
44/**
1cbd136b 45 * lttng_offset_align_floor - Calculate the offset needed to align an object
953192ba
MD
46 * on its natural alignment towards lower addresses.
47 * @align_drift: object offset from an "alignment"-aligned address.
48 * @alignment: natural object alignment. Must be non-zero, power of 2.
49 *
50 * Returns the offset that must be substracted to align towards lower addresses.
51 */
28f23191
JG
52#define lttng_offset_align_floor(align_drift, alignment) \
53 ({ \
54 LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0 || ((alignment) & ((alignment) -1))); \
55 (((align_drift) - (alignment)) & ((alignment) -1)); \
953192ba
MD
56 })
57
58#endif /* _LTTNG_ALIGN_H */
This page took 0.079175 seconds and 4 git commands to generate.