Support count_ones etc with #simd

This commit is contained in:
gingerBill
2022-05-26 17:48:51 +01:00
parent 7092273a8f
commit 20e7b5c88a
4 changed files with 26 additions and 12 deletions

View File

@@ -3559,7 +3559,14 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32
return false;
}
if (!is_type_integer_like(x.type)) {
if (is_type_simd_vector(x.type) && id != BuiltinProc_reverse_bits) {
Type *elem = base_array_type(x.type);
if (!is_type_integer_like(elem)) {
gbString xts = type_to_string(x.type);
error(x.expr, "#simd values passed to '%.*s' must have an element of an integer-like type (integer, boolean, enum, bit_set), got %s", LIT(builtin_name), xts);
gb_string_free(xts);
}
} else if (!is_type_integer_like(x.type)) {
gbString xts = type_to_string(x.type);
error(x.expr, "Values passed to '%.*s' must be an integer-like type (integer, boolean, enum, bit_set), got %s", LIT(builtin_name), xts);
gb_string_free(xts);