From 0c46d06e6308281be257b0529874b7c8cc110ea3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 24 May 2021 22:39:27 +0100 Subject: Add `intrinsics.mem_zero` --- src/llvm_backend.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/llvm_backend.cpp') 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, ""); -- cgit v1.2.3