fn vyre_packed_byte(words: ptr<storage, array<u32>, read>, index: u32) -> u32 {
let word = (*words)[index >> 2u];
let shift = (index & 3u) << 3u;
return (word >> shift) & 0xffu;
}
fn vyre_store_packed_byte(words: ptr<storage, array<u32>, read_write>, index: u32, byte: u32) {
let word_index = index >> 2u;
let shift = (index & 3u) << 3u;
let mask = 0xffu << shift;
let old_word = (*words)[word_index];
(*words)[word_index] = (old_word & ~mask) | ((byte & 0xffu) << shift);
}
fn vyre_low_byte_mask(byte_len: u32) -> u32 {
let rem = byte_len & 3u;
if (rem == 0u) {
return 0xffffffffu;
}
return (1u << (rem << 3u)) - 1u;
}
fn vyre_repeated_byte(byte: u32) -> u32 {
let b = byte & 0xffu;
return b | (b << 8u) | (b << 16u) | (b << 24u);
}
fn vyre_hex_value(byte: u32) -> u32 {
if (byte >= 48u && byte <= 57u) {
return byte - 48u;
}
if (byte >= 65u && byte <= 70u) {
return byte - 55u;
}
if (byte >= 97u && byte <= 102u) {
return byte - 87u;
}
return 0xffffffffu;
}
fn vyre_hex_upper(nibble: u32) -> u32 {
let n = nibble & 0x0fu;
if (n < 10u) {
return 48u + n;
}
return 55u + n;
}
fn vyre_hex_lower(nibble: u32) -> u32 {
let n = nibble & 0x0fu;
if (n < 10u) {
return 48u + n;
}
return 87u + n;
}