eal: add macro to align value to the nearest multiple
Add macro to align value to the nearest multiple of the given value, resultant value might be greater than or less than the first parameter whichever difference is the lowest. Update unit test to include the new macro. Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
This commit is contained in:
parent
55878866eb
commit
f56e551485
@ -199,6 +199,10 @@ test_align(void)
|
||||
val = RTE_ALIGN_MUL_FLOOR(i, p);
|
||||
if (val % p != 0 || val > i)
|
||||
FAIL_ALIGN("RTE_ALIGN_MUL_FLOOR", i, p);
|
||||
val = RTE_ALIGN_MUL_NEAR(i, p);
|
||||
if (val % p != 0 || ((val != RTE_ALIGN_MUL_CEIL(i, p))
|
||||
& (val != RTE_ALIGN_MUL_FLOOR(i, p))))
|
||||
FAIL_ALIGN("RTE_ALIGN_MUL_NEAR", i, p);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -248,6 +248,18 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void)
|
||||
#define RTE_ALIGN_MUL_FLOOR(v, mul) \
|
||||
((v / ((typeof(v))(mul))) * (typeof(v))(mul))
|
||||
|
||||
/**
|
||||
* Macro to align value to the nearest multiple of the given value.
|
||||
* The resultant value might be greater than or less than the first parameter
|
||||
* whichever difference is the lowest.
|
||||
*/
|
||||
#define RTE_ALIGN_MUL_NEAR(v, mul) \
|
||||
({ \
|
||||
typeof(v) ceil = RTE_ALIGN_MUL_CEIL(v, mul); \
|
||||
typeof(v) floor = RTE_ALIGN_MUL_FLOOR(v, mul); \
|
||||
(ceil - v) > (v - floor) ? floor : ceil; \
|
||||
})
|
||||
|
||||
/**
|
||||
* Checks if a pointer is aligned to a given power-of-two value
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user