40template <
typename T>
struct zext {};
42template <>
struct zext<uint8_t> {
61 auto valWide =
static_cast<WideT
>(
val);
67 requires std::is_unsigned_v<T> && (!CanZExt<T>)
77 requires std::is_unsigned_v<T>
83 if (
int inPosEnd = inPos + out.
size(); in.
size() < inPosEnd)
84 inPosFixup = in.
size() - inPosEnd;
89 in = in.
getCrop(inPos, out.
size()).getAsArray1DRef();
94 int posMismatchBits = CHAR_BIT * (-inPosFixup);
98 memcpy(out.
begin(), &tmp,
sizeof(
T));
113 switch (out.
size()) {
127 __builtin_unreachable();
138 std::fill(out.
begin(), out.
end(), std::byte{0x00});
140 for (
int outIndex = 0; outIndex != out.
size(); ++outIndex) {
141 const int inIndex = inPos + outIndex;
142 if (inIndex >= in.
size())
144 out(outIndex) = in(inIndex);
156 std::fill(out.
begin(), out.
end(), std::byte{0x00});
158 inPos = std::min(inPos, in.
size());
160 int inPosEnd = inPos + out.
size();
161 inPosEnd = std::min(inPosEnd, in.
size());
164 const int copySize = inPosEnd - inPos;
168 out = out.
getCrop(0, copySize).getAsArray1DRef();
169 in = in.
getCrop(inPos, copySize).getAsArray1DRef();
CroppedArray1DRef< T > getCrop(int offset, int numElts) const
int RAWSPEED_READONLY size() const
void variableLengthLoad(Array1DRef< std::byte > out, Array1DRef< const std::byte > in, int inPos)
T logicalRightShiftSafe(T val, int shAmt)
constexpr RAWSPEED_READNONE Ttgt implicit_cast(Tsrc value)
void variableLengthLoadNaiveViaConditionalLoad(Array1DRef< std::byte > out, Array1DRef< const std::byte > in, int inPos)
constexpr bool RAWSPEED_READNONE isPowerOfTwo(T val)
void variableLengthLoad(const Array1DRef< std::byte > out, Array1DRef< const std::byte > in, int inPos)
constexpr unsigned RAWSPEED_READNONE bitwidth(T unused={})
void variableLengthLoadNaiveViaMemcpy(Array1DRef< std::byte > out, Array1DRef< const std::byte > in, int inPos)
T getLE(const void *data)