diff --git a/core/math/bits/bits.odin b/core/math/bits/bits.odin index 5f8af593a..21611fe5c 100644 --- a/core/math/bits/bits.odin +++ b/core/math/bits/bits.odin @@ -529,3 +529,128 @@ len_u8_table := [256]u8{ }; +bitfield_extract_u8 :: proc(value: u8, offset, bits: uint) -> u8 { return (value >> offset) & u8(1< u16 { return (value >> offset) & u16(1< u32 { return (value >> offset) & u32(1< u64 { return (value >> offset) & u64(1< u128 { return (value >> offset) & u128(1< uint { return (value >> offset) & uint(1< i8 { + v := (u8(value) >> offset) & u8(1< i16 { + v := (u16(value) >> offset) & u16(1< i32 { + v := (u32(value) >> offset) & u32(1< i64 { + v := (u64(value) >> offset) & u64(1< i128 { + v := (u128(value) >> offset) & u128(1< int { + v := (uint(value) >> offset) & uint(1< u8 { + mask := u8(1< u16 { + mask := u16(1< u32 { + mask := u32(1< u64 { + mask := u64(1< u128 { + mask := u128(1< uint { + mask := uint(1< i8 { + mask := i8(1< i16 { + mask := i16(1< i32 { + mask := i32(1< i64 { + mask := i64(1< i128 { + mask := i128(1< int { + mask := int(1<