mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-16 16:14:06 +00:00
Add intrinsics.count_trailing_ones and intrinsics.count_leading_ones
This commit is contained in:
@@ -5204,6 +5204,8 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As
|
||||
case BuiltinProc_count_zeros:
|
||||
case BuiltinProc_count_trailing_zeros:
|
||||
case BuiltinProc_count_leading_zeros:
|
||||
case BuiltinProc_count_trailing_ones:
|
||||
case BuiltinProc_count_leading_ones:
|
||||
case BuiltinProc_reverse_bits:
|
||||
{
|
||||
Operand x = {};
|
||||
@@ -5301,6 +5303,27 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As
|
||||
v += 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case BuiltinProc_count_trailing_ones:
|
||||
for (u64 i = 0; i < bit_size; i++) {
|
||||
u8 b = cast(u8)(i & 7);
|
||||
u8 j = cast(u8)(i >> 3);
|
||||
if ((rop[j] & (1 << b)) == 0) {
|
||||
break;
|
||||
}
|
||||
v += 1;
|
||||
}
|
||||
break;
|
||||
case BuiltinProc_count_leading_ones:
|
||||
for (u64 i = bit_size-1; i < bit_size; i--) {
|
||||
u8 b = cast(u8)(i & 7);
|
||||
u8 j = cast(u8)(i >> 3);
|
||||
if ((rop[j] & (1 << b)) == 0) {
|
||||
break;
|
||||
}
|
||||
v += 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user