aboutsummaryrefslogtreecommitdiff
path: root/src/check_builtin.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-26 11:24:10 +0100
committergingerBill <bill@gingerbill.org>2022-05-26 11:24:10 +0100
commit35502816c7d53b0b5fd422537d32efb5c34b1811 (patch)
tree63880ffd0b164156b62cacafd94514c337f53d33 /src/check_builtin.cpp
parent7ec0236fbf55939ef46662a732b00908730f826b (diff)
Add `simd_add_sat` `simd_sub_sat`
Diffstat (limited to 'src/check_builtin.cpp')
-rw-r--r--src/check_builtin.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp
index edf84b152..682667972 100644
--- a/src/check_builtin.cpp
+++ b/src/check_builtin.cpp
@@ -458,6 +458,8 @@ bool check_builtin_simd_operation(CheckerContext *c, Operand *operand, Ast *call
}
// Integer only
+ case BuiltinProc_simd_add_sat:
+ case BuiltinProc_simd_sub_sat:
case BuiltinProc_simd_rem:
case BuiltinProc_simd_and:
case BuiltinProc_simd_or:
@@ -486,20 +488,25 @@ bool check_builtin_simd_operation(CheckerContext *c, Operand *operand, Ast *call
}
Type *elem = base_array_type(x.type);
- if (id == BuiltinProc_simd_rem) {
+ switch (id) {
+ case BuiltinProc_simd_add_sat:
+ case BuiltinProc_simd_sub_sat:
+ case BuiltinProc_simd_rem:
if (!is_type_integer(elem)) {
gbString xs = type_to_string(x.type);
error(x.expr, "'%.*s' expected a #simd type with an integer element, got '%s'", LIT(builtin_name), xs);
gb_string_free(xs);
return false;
}
- } else {
+ break;
+ default:
if (!is_type_integer(elem) && !is_type_boolean(elem)) {
gbString xs = type_to_string(x.type);
error(x.expr, "'%.*s' expected a #simd type with an integer or boolean element, got '%s'", LIT(builtin_name), xs);
gb_string_free(xs);
return false;
}
+ break;
}
operand->mode = Addressing_Value;