diff options
| author | Barinzaya <barinzaya@gmail.com> | 2024-12-19 20:07:04 -0500 |
|---|---|---|
| committer | Barinzaya <barinzaya@gmail.com> | 2024-12-19 20:07:04 -0500 |
| commit | 14216ebf5169581a738e9c235ef8119a95271b12 (patch) | |
| tree | 2bc1caab5c315e6d6e1b7c23420cdbcfedf2aaf3 /src/check_expr.cpp | |
| parent | 597fba7c31f5e927b0c7431444dad132352b4046 (diff) | |
Added some implicit broadcasting for #simd arrays.
This covers broadcasting from untyped numbers when assigning, as well as
when performing binary operations. SIMD intrinsics have not been
adjusted
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cc9483187..81e33a8e8 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3672,6 +3672,13 @@ gb_internal bool check_binary_array_expr(CheckerContext *c, Token op, Operand *x } } } + if (is_type_simd_vector(x->type) && !is_type_simd_vector(y->type)) { + if (check_is_assignable_to(c, y, x->type)) { + if (check_binary_op(c, x, op)) { + return true; + } + } + } return false; } @@ -4556,6 +4563,19 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar break; } + case Type_SimdVector: { + Type *elem = base_array_type(t); + if (check_is_assignable_to(c, operand, elem)) { + operand->mode = Addressing_Value; + } else { + operand->mode = Addressing_Invalid; + convert_untyped_error(c, operand, target_type); + return; + } + + break; + } + case Type_Matrix: { Type *elem = base_array_type(t); if (check_is_assignable_to(c, operand, elem)) { |