aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-02-23 16:44:16 +0000
committergingerBill <bill@gingerbill.org>2019-02-23 16:44:16 +0000
commit4c51384ad64a2f63863e6bacab7aeee881659047 (patch)
tree1bf03fa8094cceb8137503ad6df11025df10e950 /src/ir.cpp
parent64bd884d94fc45600eaed9566585d455b875a87a (diff)
`intrinsics.vector` type (Experimental)
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index cd7e8d99a..4df6665f7 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -7268,6 +7268,7 @@ irAddr ir_build_addr(irProcedure *proc, Ast *expr) {
case Type_Array: et = bt->Array.elem; break;
case Type_Slice: et = bt->Slice.elem; break;
case Type_BitSet: et = bt->BitSet.elem; break;
+ case Type_SimdVector: et = bt->SimdVector.elem; break;
}
String proc_name = {};
@@ -9995,6 +9996,18 @@ void ir_setup_type_info_data(irProcedure *proc) { // NOTE(bill): Setup type_info
tag = ir_emit_conv(proc, variant_ptr, t_type_info_opaque_ptr);
ir_emit_store(proc, ir_emit_struct_ep(proc, tag, 0), ir_get_type_info_ptr(proc, t->Opaque.elem));
break;
+
+ case Type_SimdVector:
+ ir_emit_comment(proc, str_lit("Type_SimdVector"));
+ tag = ir_emit_conv(proc, variant_ptr, t_type_info_simd_vector_ptr);
+ if (t->SimdVector.is_x86_mmx) {
+ ir_emit_store(proc, ir_emit_struct_ep(proc, tag, 3), v_true);
+ } else {
+ ir_emit_store(proc, ir_emit_struct_ep(proc, tag, 0), ir_get_type_info_ptr(proc, t->SimdVector.elem));
+ ir_emit_store(proc, ir_emit_struct_ep(proc, tag, 1), ir_const_int(type_size_of(t->SimdVector.elem)));
+ ir_emit_store(proc, ir_emit_struct_ep(proc, tag, 2), ir_const_int(t->SimdVector.count));
+ }
+ break;
}