37#include "embed_lane.h"
39#ifndef MMGR_VECTOR_OFF
40#define MMGR_VECTOR_OFF 0
42#if (MMGR_VECTOR_OFF != 0) && (MMGR_VECTOR_OFF != 1)
43#error "MMGR_VECTOR_OFF must be 0 or 1"
47#define MMGR_VECTOR_BYTES 0u
49#define MMGR_VECTOR_BYTES EMBED_LANE_BYTES
60#define MMGR_VECTOR_MASK_OF(bytes_) \
61 (((bytes_) >= EMBED_LANE_BYTES) ? EMBED_LANE_MASK_ALL : (((MmgrVectorMask)1 << (bytes_)) - 1u))
72 return (
size_t)embed_lane_mask_first(lanes);
83 return (lanes == 0u) ? EMBED_LANE_MASK_ALL : ((lanes & (0u - lanes)) - 1u);
86#if MMGR_VECTOR_BYTES != 0u
88typedef embed_lane MmgrVector;
90EMBED_INLINE MmgrVector mmgr_vector_load(
const uint8_t *at)
92 return embed_lane_load(at);
95EMBED_INLINE MmgrVector mmgr_vector_load_aligned(
const uint8_t *at)
97 return embed_lane_load_aligned(at);
100EMBED_INLINE
void mmgr_vector_put(uint8_t *dst, MmgrVector vector)
102 embed_lane_put(dst, vector);
105EMBED_INLINE MmgrVector mmgr_vector_fill(uint8_t val)
107 return embed_lane_fill_byte(val);
110EMBED_INLINE
MmgrVectorMask mmgr_vector_equal_lanes(MmgrVector one, MmgrVector other)
112 return embed_lane_bytes_equal(one, other);
115EMBED_INLINE
MmgrVectorMask mmgr_vector_zero_lanes(MmgrVector vector)
117 return embed_lane_bytes_zero(vector);
123EMBED_INLINE
MmgrVectorMask mmgr_vector_differ_lanes(MmgrVector one, MmgrVector other)
125 return EMBED_LANE_MASK_ALL & ~mmgr_vector_equal_lanes(one, other);
embed_lane_mask MmgrVectorMask
The bytes of a lane as a mask, one bit a byte, the first byte lowest.
static MmgrVectorMask mmgr_vector_mask_before(MmgrVectorMask lanes)
The bytes before the first byte set in a mask, every byte where none is set.
static size_t mmgr_vector_mask_first(MmgrVectorMask lanes)
The index of the first byte set in a mask.