Add intrinsics.count_trailing_ones and intrinsics.count_leading_ones

This commit is contained in:
gingerBill
2026-02-02 14:28:16 +00:00
parent 80c9482774
commit bb7496a2fc
5 changed files with 47 additions and 0 deletions

View File

@@ -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;
}