From 0a66f8c9a35c57714952182143984eb988f2ef0f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Apr 2021 10:39:20 +0100 Subject: [PATCH] Remove `intrinsics.x86_mmx` type --- core/fmt/fmt.odin | 3 --- core/intrinsics/intrinsics.odin | 4 ---- core/odin/doc-format/doc_format.odin | 5 ----- core/reflect/types.odin | 12 ++++-------- core/runtime/core.odin | 1 - core/runtime/print.odin | 12 ++++-------- src/check_expr.cpp | 3 --- src/checker.cpp | 9 --------- src/docs_format.cpp | 4 ---- src/docs_writer.cpp | 10 +++------- src/ir.cpp | 10 +++------- src/ir_print.cpp | 10 +++------- src/llvm_backend.cpp | 18 ++++-------------- src/types.cpp | 25 ++++--------------------- 14 files changed, 25 insertions(+), 101 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 4716f7954..6de6b0245 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1638,9 +1638,6 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) { } case runtime.Type_Info_Simd_Vector: - if info.is_x86_mmx { - io.write_string(fi.writer, "intrinsics.x86_mmx<>"); - } io.write_byte(fi.writer, '<'); defer io.write_byte(fi.writer, '>'); for i in 0.. type/#simd[N]T soa_struct :: proc($N: int, $T: typeid) -> type/#soa[N]T diff --git a/core/odin/doc-format/doc_format.odin b/core/odin/doc-format/doc_format.odin index 61bfc913d..8d9d0a027 100644 --- a/core/odin/doc-format/doc_format.odin +++ b/core/odin/doc-format/doc_format.odin @@ -212,11 +212,6 @@ Type_Flag_Bit_Set :: enum u32le { Underlying_Type = 4, } -Type_Flags_SimdVector :: distinct bit_set[Type_Flag_SimdVector; u32le]; -Type_Flag_SimdVector :: enum u32le { - x86_mmx = 1, -} - from_array :: proc(base: ^Header_Base, a: $A/Array($T)) -> []T { s: mem.Raw_Slice; s.data = rawptr(uintptr(base) + uintptr(a.offset)); diff --git a/core/reflect/types.odin b/core/reflect/types.odin index 34a53b10a..8c7dc1735 100644 --- a/core/reflect/types.odin +++ b/core/reflect/types.odin @@ -565,14 +565,10 @@ write_type_writer :: proc(w: io.Writer, ti: ^Type_Info) -> (n: int) { n += _n(io.write_byte(w, ']')); case Type_Info_Simd_Vector: - if info.is_x86_mmx { - n += write_string(w, "intrinsics.x86_mmx"); - } else { - n += write_string(w, "#simd["); - n += _n(io.write_i64(w, i64(info.count))); - n += _n(io.write_byte(w, ']')); - n += write_type(w, info.elem); - } + n += write_string(w, "#simd["); + n += _n(io.write_i64(w, i64(info.count))); + n += _n(io.write_byte(w, ']')); + n += write_type(w, info.elem); case Type_Info_Relative_Pointer: n += write_string(w, "#relative("); diff --git a/core/runtime/core.odin b/core/runtime/core.odin index 1052b74fb..78d43b65a 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -144,7 +144,6 @@ Type_Info_Simd_Vector :: struct { elem: ^Type_Info, elem_size: int, count: int, - is_x86_mmx: bool, }; Type_Info_Relative_Pointer :: struct { pointer: ^Type_Info, diff --git a/core/runtime/print.odin b/core/runtime/print.odin index c05e6039c..e60d97103 100644 --- a/core/runtime/print.odin +++ b/core/runtime/print.odin @@ -347,14 +347,10 @@ print_type :: proc "contextless" (ti: ^Type_Info) { case Type_Info_Simd_Vector: - if info.is_x86_mmx { - print_string("intrinsics.x86_mmx"); - } else { - print_string("#simd["); - print_u64(u64(info.count)); - print_byte(']'); - print_type(info.elem); - } + print_string("#simd["); + print_u64(u64(info.count)); + print_byte(']'); + print_type(info.elem); case Type_Info_Relative_Pointer: print_string("#relative("); diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 31057598d..b9ff3bf1f 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9324,9 +9324,6 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type if (!is_constant) { error(node, "Expected all constant elements for a simd vector"); } - if (t->SimdVector.is_x86_mmx) { - error(node, "Compound literals are not allowed with intrinsics.x86_mmx"); - } } diff --git a/src/checker.cpp b/src/checker.cpp index 10376b149..eab704d9c 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -783,15 +783,6 @@ void init_universal(void) { } } - // TODO(bill): Set the correct arch for this - if (bc->metrics.arch == TargetArch_amd64 || bc->metrics.arch == TargetArch_386) { - t_vector_x86_mmx = alloc_type(Type_SimdVector); - t_vector_x86_mmx->SimdVector.is_x86_mmx = true; - - Entity *entity = alloc_entity(Entity_TypeName, nullptr, make_token_ident(str_lit("x86_mmx")), t_vector_x86_mmx); - add_global_entity(entity, intrinsics_pkg->scope); - } - bool defined_values_double_declaration = false; for_array(i, bc->defined_values.entries) { char const *name = cast(char const *)cast(uintptr)bc->defined_values.entries[i].key.key; diff --git a/src/docs_format.cpp b/src/docs_format.cpp index c3aaebf64..e620da51f 100644 --- a/src/docs_format.cpp +++ b/src/docs_format.cpp @@ -114,10 +114,6 @@ enum OdinDocTypeFlag_BitSet : u32 { OdinDocTypeFlag_BitSet_UnderlyingType = 1<<4, }; -enum OdinDocTypeFlag_SimdVector : u32 { - OdinDocTypeFlag_BitSet_x86_mmx = 1<<1, -}; - enum { // constants OdinDocType_ElemsCap = 4, diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp index 5c9bb9f63..f4fd02376 100644 --- a/src/docs_writer.cpp +++ b/src/docs_writer.cpp @@ -724,13 +724,9 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) { break; case Type_SimdVector: doc_type.kind = OdinDocType_SimdVector; - if (type->SimdVector.is_x86_mmx) { - doc_type.flags |= OdinDocTypeFlag_BitSet_x86_mmx; - } else { - doc_type.elem_count_len = 1; - doc_type.elem_counts[0] = type->SimdVector.count; - doc_type.types = odin_doc_type_as_slice(w, type->SimdVector.elem); - } + doc_type.elem_count_len = 1; + doc_type.elem_counts[0] = type->SimdVector.count; + doc_type.types = odin_doc_type_as_slice(w, type->SimdVector.elem); // TODO(bill): break; case Type_RelativePointer: diff --git a/src/ir.cpp b/src/ir.cpp index 0ad48ca27..9f08450d6 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -12564,13 +12564,9 @@ void ir_setup_type_info_data(irProcedure *proc) { // NOTE(bill): Setup type_info 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)); - } + 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; case Type_RelativePointer: diff --git a/src/ir_print.cpp b/src/ir_print.cpp index d0c014a27..54ce5dca1 100644 --- a/src/ir_print.cpp +++ b/src/ir_print.cpp @@ -624,13 +624,9 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) { } case Type_SimdVector: - if (t->SimdVector.is_x86_mmx) { - ir_write_str_lit(f, "x86_mmx"); - } else { - ir_fprintf(f, "<%lld x ", t->SimdVector.count);; - ir_print_type(f, m, t->SimdVector.elem); - ir_write_byte(f, '>'); - } + ir_fprintf(f, "<%lld x ", t->SimdVector.count);; + ir_print_type(f, m, t->SimdVector.elem); + ir_write_byte(f, '>'); return; case Type_RelativePointer: diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 48c276771..a67078180 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1445,9 +1445,6 @@ LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { } case Type_SimdVector: - if (type->SimdVector.is_x86_mmx) { - return LLVMX86MMXTypeInContext(ctx); - } return LLVMVectorType(lb_type(m, type->SimdVector.elem), cast(unsigned)type->SimdVector.count); case Type_RelativePointer: @@ -1899,9 +1896,6 @@ LLVMMetadataRef lb_debug_type_internal(lbModule *m, Type *type) { break; case Type_SimdVector: - if (type->SimdVector.is_x86_mmx) { - return LLVMDIBuilderCreateVectorType(m->debug_builder, 2, 8*cast(unsigned)type_align_of(type), lb_debug_type(m, t_f64), nullptr, 0); - } return LLVMDIBuilderCreateVectorType(m->debug_builder, cast(unsigned)type->SimdVector.count, 8*cast(unsigned)type_align_of(type), lb_debug_type(m, type->SimdVector.elem), nullptr, 0); case Type_RelativePointer: { @@ -13432,15 +13426,11 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da { tag = lb_const_ptr_cast(m, variant_ptr, t_type_info_simd_vector_ptr); - LLVMValueRef vals[4] = {}; + LLVMValueRef vals[3] = {}; - if (t->SimdVector.is_x86_mmx) { - vals[3] = lb_const_bool(m, t_bool, true).value; - } else { - vals[0] = lb_get_type_info_ptr(m, t->SimdVector.elem).value; - vals[1] = lb_const_int(m, t_int, type_size_of(t->SimdVector.elem)).value; - vals[2] = lb_const_int(m, t_int, t->SimdVector.count).value; - } + vals[0] = lb_get_type_info_ptr(m, t->SimdVector.elem).value; + vals[1] = lb_const_int(m, t_int, type_size_of(t->SimdVector.elem)).value; + vals[2] = lb_const_int(m, t_int, t->SimdVector.count).value; lbValue res = {}; res.type = type_deref(tag.type); diff --git a/src/types.cpp b/src/types.cpp index 9871e469c..f706032a5 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -283,7 +283,6 @@ struct TypeProc { TYPE_KIND(SimdVector, struct { \ i64 count; \ Type *elem; \ - bool is_x86_mmx; \ }) \ TYPE_KIND(RelativePointer, struct { \ Type *pointer_type; \ @@ -679,8 +678,6 @@ gb_global Type *t_source_code_location_ptr = nullptr; gb_global Type *t_map_hash = nullptr; gb_global Type *t_map_header = nullptr; -gb_global Type *t_vector_x86_mmx = nullptr; - gb_global Type *t_equal_proc = nullptr; gb_global Type *t_hasher_proc = nullptr; @@ -2162,12 +2159,8 @@ bool are_types_identical(Type *x, Type *y) { case Type_SimdVector: if (y->kind == Type_SimdVector) { - if (x->SimdVector.is_x86_mmx == y->SimdVector.is_x86_mmx) { - if (x->SimdVector.is_x86_mmx) { - return true; - } else if (x->SimdVector.count == y->SimdVector.count) { - return are_types_identical(x->SimdVector.elem, y->SimdVector.elem); - } + if (x->SimdVector.count == y->SimdVector.count) { + return are_types_identical(x->SimdVector.elem, y->SimdVector.elem); } } break; @@ -2967,9 +2960,6 @@ i64 type_align_of_internal(Type *t, TypePath *path) { } case Type_SimdVector: { - if (t->SimdVector.is_x86_mmx) { - return 8; - } // align of i64 count = t->SimdVector.count; Type *elem = t->SimdVector.elem; @@ -3233,9 +3223,6 @@ i64 type_size_of_internal(Type *t, TypePath *path) { } case Type_SimdVector: { - if (t->SimdVector.is_x86_mmx) { - return 8; - } i64 count = t->SimdVector.count; Type *elem = t->SimdVector.elem; return count * type_size_of_internal(elem, path); @@ -3670,12 +3657,8 @@ gbString write_type_to_string(gbString str, Type *type) { break; case Type_SimdVector: - if (type->SimdVector.is_x86_mmx) { - return gb_string_appendc(str, "intrinsics.x86_mmx"); - } else { - str = gb_string_append_fmt(str, "#simd[%d]", cast(int)type->SimdVector.count); - str = write_type_to_string(str, type->SimdVector.elem); - } + str = gb_string_append_fmt(str, "#simd[%d]", cast(int)type->SimdVector.count); + str = write_type_to_string(str, type->SimdVector.elem); break; case Type_RelativePointer: