aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-26 17:09:46 +0100
committergingerBill <bill@gingerbill.org>2022-05-26 17:09:46 +0100
commitd0e8a735bae52eaa7d1d852953da721071571020 (patch)
tree76d4fdf971f7a8a4f85992e228c01b53a8b92fbe /src/llvm_backend_proc.cpp
parent208226dba29d46514c8c2b7a8fcd023f1ebf7bd8 (diff)
Add arithmetic operator support for simd vectors; Add `intrinsics.simd_and_not`
Diffstat (limited to 'src/llvm_backend_proc.cpp')
-rw-r--r--src/llvm_backend_proc.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index a56aa862a..99c023311 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -1097,11 +1097,15 @@ lbValue lb_build_builtin_simd_proc(lbProcedure *p, Ast *expr, TypeAndValue const
case BuiltinProc_simd_and:
case BuiltinProc_simd_or:
case BuiltinProc_simd_xor:
+ case BuiltinProc_simd_and_not:
arg1 = lb_build_expr(p, ce->args[1]);
switch (builtin_id) {
case BuiltinProc_simd_and: op_code = LLVMAnd; break;
case BuiltinProc_simd_or: op_code = LLVMOr; break;
case BuiltinProc_simd_xor: op_code = LLVMXor; break;
+ case BuiltinProc_simd_and_not:
+ res.value = LLVMBuildAnd(p->builder, arg0.value, LLVMBuildNot(p->builder, arg1.value, ""), "");
+ return res;
}
if (op_code) {
res.value = LLVMBuildBinOp(p->builder, op_code, arg0.value, arg1.value, "");