diff options
| author | gingerBill <bill@gingerbill.org> | 2021-05-24 22:39:27 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-05-24 22:39:27 +0100 |
| commit | 0c46d06e6308281be257b0529874b7c8cc110ea3 (patch) | |
| tree | c41b5619fa9fd5500e9ec0d58b5348bba438e617 /src/llvm_backend.cpp | |
| parent | 44b6e7c45db3bb3cc6ff30bca08d0b761b975c30 (diff) | |
Add `intrinsics.mem_zero`
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index b622d1729..74c6cfc11 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -9478,8 +9478,6 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv, case BuiltinProc_mem_copy: case BuiltinProc_mem_copy_non_overlapping: { - - lbValue dst = lb_build_expr(p, ce->args[0]); lbValue src = lb_build_expr(p, ce->args[1]); lbValue len = lb_build_expr(p, ce->args[2]); @@ -9513,6 +9511,20 @@ lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValue const &tv, return {}; } + case BuiltinProc_mem_zero: + { + lbValue ptr = lb_build_expr(p, ce->args[0]); + lbValue len = lb_build_expr(p, ce->args[1]); + ptr = lb_emit_conv(p, ptr, t_rawptr); + len = lb_emit_conv(p, len, t_int); + + LLVMTypeRef type_i8 = LLVMInt8TypeInContext(p->module->ctx); + unsigned alignment = 1; + LLVMBuildMemSet(p->builder, ptr.value, LLVMConstNull(type_i8), len.value, alignment); + + return {}; + } + case BuiltinProc_atomic_fence: LLVMBuildFence(p->builder, LLVMAtomicOrderingSequentiallyConsistent, false, ""); |