aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-25 20:27:14 +0100
committergingerBill <bill@gingerbill.org>2022-05-25 20:27:14 +0100
commit4c4480104de9d6ba520215afb6330c95b0e56b93 (patch)
tree8e413cbc0df4cdcec9baeb83226e269112340a85 /src/llvm_backend_proc.cpp
parent5c72974167405a37bd397788e3224d773efd9c46 (diff)
Add `simd_extract` and `simd_insert`
Diffstat (limited to 'src/llvm_backend_proc.cpp')
-rw-r--r--src/llvm_backend_proc.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index 82ad6daef..4af5d9440 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -991,6 +991,7 @@ lbValue lb_build_builtin_simd_proc(lbProcedure *p, Ast *expr, TypeAndValue const
lbValue arg0 = lb_build_expr(p, ce->args[0]);
lbValue arg1 = {};
+ lbValue arg2 = {};
Type *elem = base_array_type(arg0.type);
@@ -1173,6 +1174,16 @@ lbValue lb_build_builtin_simd_proc(lbProcedure *p, Ast *expr, TypeAndValue const
}
}
break;
+
+ case BuiltinProc_simd_extract:
+ arg1 = lb_build_expr(p, ce->args[1]);
+ res.value = LLVMBuildExtractElement(p->builder, arg0.value, arg1.value, "");
+ return res;
+ case BuiltinProc_simd_insert:
+ arg1 = lb_build_expr(p, ce->args[1]);
+ arg2 = lb_build_expr(p, ce->args[2]);
+ res.value = LLVMBuildInsertElement(p->builder, arg0.value, arg2.value, arg1.value, "");
+ return res;
}
GB_PANIC("Unhandled simd intrinsic: '%.*s'", LIT(builtin_procs[id].name));
return {};