aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-02-23 18:05:41 +0000
committergingerBill <bill@gingerbill.org>2019-02-23 18:05:41 +0000
commit38ae2e9efaf8d227a138d749085599e7ee9fde54 (patch)
treed2b5e32dc31dab7b055bbf7da38e55c4a5b96811 /src
parent684945ea57da61c82ab5425930c5571157359cfb (diff)
Allow basic arithmetic operations for vectors
Diffstat (limited to 'src')
-rw-r--r--src/ir_print.cpp2
-rw-r--r--src/types.cpp13
2 files changed, 10 insertions, 5 deletions
diff --git a/src/ir_print.cpp b/src/ir_print.cpp
index 0cc9f52e3..af5abe180 100644
--- a/src/ir_print.cpp
+++ b/src/ir_print.cpp
@@ -1700,7 +1700,7 @@ void ir_print_instr(irFileBuffer *f, irModule *m, irValue *value) {
case irInstr_BinaryOp: {
irInstrBinaryOp *bo = &value->Instr.BinaryOp;
Type *type = base_type(ir_type(bo->left));
- Type *elem_type = type;
+ Type *elem_type = base_array_type(type);
ir_fprintf(f, "%%%d = ", value->index);
diff --git a/src/types.cpp b/src/types.cpp
index 6dcbf029f..c6886e984 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -974,11 +974,20 @@ bool is_type_poly_proc(Type *t) {
t = base_type(t);
return t->kind == Type_Proc && t->Proc.is_polymorphic;
}
+bool is_type_simd_vector(Type *t) {
+ t = base_type(t);
+ return t->kind == Type_SimdVector;
+}
+
Type *base_array_type(Type *t) {
if (is_type_array(t)) {
t = base_type(t);
return t->Array.elem;
}
+ if (is_type_simd_vector(t)) {
+ t = base_type(t);
+ return t->SimdVector.elem;
+ }
return t;
}
@@ -987,10 +996,6 @@ bool is_type_generic(Type *t) {
return t->kind == Type_Generic;
}
-bool is_type_simd_vector(Type *t) {
- t = base_type(t);
- return t->kind == Type_SimdVector;
-}
Type *core_array_type(Type *t) {