aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-07-24 12:54:05 +0100
committergingerBill <bill@gingerbill.org>2022-07-24 12:54:05 +0100
commit2542983d709ced71e0aca9e67909b91c70d33baa (patch)
tree3ea50a5e66ae7373e8d077170ff7f57d2a864651 /src
parentd492fb3501390ea2fb69addad21855fd1c96e717 (diff)
Fix #1793
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend_expr.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 1365028fc..b28470770 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -1,3 +1,4 @@
+lbValue lb_emit_arith_matrix(lbProcedure *p, TokenKind op, lbValue lhs, lbValue rhs, Type *type, bool component_wise=false);
lbValue lb_emit_logical_binary_expr(lbProcedure *p, TokenKind op, Ast *left, Ast *right, Type *type) {
lbModule *m = p->module;
@@ -265,6 +266,11 @@ lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x, Type *type)
} else {
res.value = LLVMBuildNeg(p->builder, x.value, "");
}
+ } else if (is_type_matrix(x.type)) {
+ lbValue zero = {};
+ zero.value = LLVMConstNull(lb_type(p->module, type));
+ zero.type = type;
+ return lb_emit_arith_matrix(p, Token_Sub, zero, x, type, true);
} else {
GB_PANIC("Unhandled type %s", type_to_string(x.type));
}
@@ -976,7 +982,7 @@ lbValue lb_emit_vector_mul_matrix(lbProcedure *p, lbValue lhs, lbValue rhs, Type
-lbValue lb_emit_arith_matrix(lbProcedure *p, TokenKind op, lbValue lhs, lbValue rhs, Type *type, bool component_wise=false) {
+lbValue lb_emit_arith_matrix(lbProcedure *p, TokenKind op, lbValue lhs, lbValue rhs, Type *type, bool component_wise) {
GB_ASSERT(is_type_matrix(lhs.type) || is_type_matrix(rhs.type));