From f313538ea5cfbff0139e46ce71a389ddec5cfffd Mon Sep 17 00:00:00 2001 From: ryuukk <44361234+ryuukk@users.noreply.github.com> Date: Sat, 6 May 2023 18:00:33 +0200 Subject: Missing cast --- src/ptr_map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/ptr_map.cpp b/src/ptr_map.cpp index fbde98693..23278014f 100644 --- a/src/ptr_map.cpp +++ b/src/ptr_map.cpp @@ -47,7 +47,7 @@ gb_internal gb_inline u32 ptr_map_hash_key(uintptr key) { key = key ^ (key << 28); res = cast(u32)key; #elif defined(GB_ARCH_32_BIT) - u32 state = ((u32)key) * 747796405u + 2891336453u; + u32 state = (cast(u32)key) * 747796405u + 2891336453u; u32 word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u; res = (word >> 22u) ^ word; #endif -- cgit v1.2.3 From ed580b30602fa168d2e4d6f25e4898aeedff553c Mon Sep 17 00:00:00 2001 From: "J.C. Moyer" Date: Tue, 9 May 2023 10:49:45 -0400 Subject: Zero non-diagonal elements when converting to matrix Fixes #2056 --- src/llvm_backend_expr.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 1b43aac86..108276ee3 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -2083,10 +2083,12 @@ gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) { Type *elem = base_array_type(dst); lbValue e = lb_emit_conv(p, value, elem); lbAddr v = lb_add_local_generated(p, t, false); - for (i64 i = 0; i < dst->Matrix.row_count; i++) { - isize j = cast(isize)i; - lbValue ptr = lb_emit_matrix_epi(p, v.addr, j, j); - lb_emit_store(p, ptr, e); + lbValue zero = lb_const_value(p->module, elem, exact_value_i64(0), true); + for (i64 j = 0; j < dst->Matrix.column_count; j++) { + for (i64 i = 0; i < dst->Matrix.row_count; i++) { + lbValue ptr = lb_emit_matrix_epi(p, v.addr, i, j); + lb_emit_store(p, ptr, i == j ? e : zero); + } } -- cgit v1.2.3 From 277ae4e2b026b2b45d2ec5b6d59097f42722846d Mon Sep 17 00:00:00 2001 From: matias Date: Wed, 10 May 2023 02:58:17 -0400 Subject: Patch "no_copy" typo in parser.cpp --- src/parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/parser.cpp b/src/parser.cpp index f33a44f31..698ba99ab 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2462,7 +2462,7 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { } is_raw_union = true; } else if (tag.string == "no_copy") { - if (is_packed) { + if (no_copy) { syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); } no_copy = true; -- cgit v1.2.3 From b567679eb6cf3fd1820a6163c1f17d620d88894f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 12 May 2023 11:34:01 +0100 Subject: Change `intrinsics.read_cycle_counter` on ARM64 --- src/llvm_backend_proc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index ddf058668..89eab74b4 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -2112,7 +2112,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu if (build_context.metrics.arch == TargetArch_arm64) { LLVMTypeRef func_type = LLVMFunctionType(LLVMInt64TypeInContext(p->module->ctx), nullptr, 0, false); bool has_side_effects = false; - LLVMValueRef the_asm = llvm_get_inline_asm(func_type, str_lit("mrs x9, cntvct_el0"), str_lit("=r"), has_side_effects); + LLVMValueRef the_asm = llvm_get_inline_asm(func_type, str_lit("mrs x0, PMCCNTR_EL0"), str_lit("=r"), has_side_effects); GB_ASSERT(the_asm != nullptr); res.value = LLVMBuildCall2(p->builder, func_type, the_asm, nullptr, 0, ""); } else { -- cgit v1.2.3 From 8693a045bbba40c5614ff5912137540c91e61cb0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 12 May 2023 11:50:49 +0100 Subject: Revert "Change `intrinsics.read_cycle_counter` on ARM64" This reverts commit b567679eb6cf3fd1820a6163c1f17d620d88894f. --- src/llvm_backend_proc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 89eab74b4..ddf058668 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -2112,7 +2112,7 @@ gb_internal lbValue lb_build_builtin_proc(lbProcedure *p, Ast *expr, TypeAndValu if (build_context.metrics.arch == TargetArch_arm64) { LLVMTypeRef func_type = LLVMFunctionType(LLVMInt64TypeInContext(p->module->ctx), nullptr, 0, false); bool has_side_effects = false; - LLVMValueRef the_asm = llvm_get_inline_asm(func_type, str_lit("mrs x0, PMCCNTR_EL0"), str_lit("=r"), has_side_effects); + LLVMValueRef the_asm = llvm_get_inline_asm(func_type, str_lit("mrs x9, cntvct_el0"), str_lit("=r"), has_side_effects); GB_ASSERT(the_asm != nullptr); res.value = LLVMBuildCall2(p->builder, func_type, the_asm, nullptr, 0, ""); } else { -- cgit v1.2.3 From bb4ff84a4a88272df3ab79009d92617307529c64 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 16 May 2023 11:52:02 +0100 Subject: Add extra mutex for error block stuff --- src/error.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/error.cpp b/src/error.cpp index 6314c43bb..defc2593f 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -8,8 +8,9 @@ struct ErrorCollector { BlockingMutex string_mutex; RecursiveMutex block_mutex; - Array error_buffer; - Array errors; + RecursiveMutex error_buffer_mutex; + Array error_buffer; + Array errors; }; gb_global ErrorCollector global_error_collector; @@ -119,6 +120,7 @@ gb_internal void begin_error_block(void) { } gb_internal void end_error_block(void) { + mutex_lock(&global_error_collector.error_buffer_mutex); isize n = global_error_collector.error_buffer.count; if (n > 0) { u8 *text = global_error_collector.error_buffer.data; @@ -150,11 +152,16 @@ gb_internal void end_error_block(void) { text = gb_alloc_array(permanent_allocator(), u8, n+1); gb_memmove(text, global_error_collector.error_buffer.data, n); text[n] = 0; + + + mutex_lock(&global_error_collector.error_out_mutex); String s = {text, n}; array_add(&global_error_collector.errors, s); + mutex_unlock(&global_error_collector.error_out_mutex); + global_error_collector.error_buffer.count = 0; } - + mutex_unlock(&global_error_collector.error_buffer_mutex); global_error_collector.in_block.store(false); mutex_unlock(&global_error_collector.block_mutex); } @@ -172,11 +179,15 @@ gb_internal ERROR_OUT_PROC(default_error_out_va) { isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va); isize n = len-1; if (global_error_collector.in_block) { + mutex_lock(&global_error_collector.error_buffer_mutex); + isize cap = global_error_collector.error_buffer.count + n; array_reserve(&global_error_collector.error_buffer, cap); u8 *data = global_error_collector.error_buffer.data + global_error_collector.error_buffer.count; gb_memmove(data, buf, n); global_error_collector.error_buffer.count += n; + + mutex_unlock(&global_error_collector.error_buffer_mutex); } else { mutex_lock(&global_error_collector.error_out_mutex); { -- cgit v1.2.3 From 171f38b9b5c0e46de98829b3f775cef5e27279be Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 18 May 2023 11:06:02 +0100 Subject: Allow implicit conversion between boolean types within `or_return` This is to improve the experience using third-party code, especially foreign C-like code which may use a distinct boolean or a different sized one --- src/check_expr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 6eb517251..0db12aba0 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7887,8 +7887,11 @@ gb_internal ExprKind check_or_return_expr(CheckerContext *c, Operand *o, Ast *no rhs.type = right_type; rhs.mode = Addressing_Value; - // TODO(bill): better error message - if (!check_is_assignable_to(c, &rhs, end_type)) { + if (is_type_boolean(right_type) && is_type_boolean(end_type)) { + // NOTE(bill): allow implicit conversion between boolean types + // within 'or_return' to improve the experience using third-party code + } else if (!check_is_assignable_to(c, &rhs, end_type)) { + // TODO(bill): better error message gbString a = type_to_string(right_type); gbString b = type_to_string(end_type); gbString ret_type = type_to_string(result_type); -- cgit v1.2.3