aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-10-18 16:52:19 +0100
committergingerBill <bill@gingerbill.org>2021-10-18 16:52:19 +0100
commit4c655865e5d9af83a98c137609b01972f4e51beb (patch)
tree2963a8f22c8e2a54dc7f081834b72a6081568842 /src/llvm_backend_general.cpp
parent7aac8df2f2ddb89ffa8b1d096f41d89e689a2293 (diff)
Begin work on matrix type
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 094275429..ee8f220ef 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -1930,6 +1930,24 @@ LLVMTypeRef lb_type_internal(lbModule *m, Type *type) {
fields[1] = base_integer;
return LLVMStructTypeInContext(ctx, fields, field_count, false);
}
+
+ case Type_Matrix:
+ {
+ i64 size = type_size_of(type);
+ i64 elem_size = type_size_of(type->Matrix.elem);
+ GB_ASSERT(elem_size > 0);
+ i64 elem_count = size/elem_size;
+ GB_ASSERT(elem_count > 0);
+
+ m->internal_type_level -= 1;
+
+ LLVMTypeRef elem = lb_type(m, type->Matrix.elem);
+ LLVMTypeRef t = LLVMArrayType(elem, cast(unsigned)elem_count);
+
+ m->internal_type_level += 1;
+ return t;
+ }
+
}
GB_PANIC("Invalid type %s", type_to_string(type));