-static_always_inline u32
-sat_sub (u32 x, u32 y)
-{
- u32 res = x - y;
- res &= -(res <= x);
- return res;
-}
-
-/* branchless validation of the descriptor - uses saturated subtraction */
-static_always_inline u32
-memif_desc_is_invalid (memif_if_t * mif, memif_desc_t * d, u32 buffer_length)
-{
- u32 rv;
- u16 valid_flags = MEMIF_DESC_FLAG_NEXT;
-
- rv = d->flags & (~valid_flags);
- rv |= sat_sub (d->region + 1, vec_len (mif->regions));
- rv |= sat_sub (d->length, buffer_length);
- rv |= sat_sub (d->offset + d->length, mif->regions[d->region].region_size);
-
- if (PREDICT_FALSE (rv))
- {
- mif->flags |= MEMIF_IF_FLAG_ERROR;
- return 1;
- }
-
- return 0;
-}
-