From 84f966cb8fd450f52e6bfdea2bb3c0645e2a77e8 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 20 Apr 2023 11:46:23 +0100 Subject: Begin work on separating int and word sizes (i.e. `size_of(int)` might not equal `size_of(uintptr)`) --- src/types.cpp | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'src/types.cpp') diff --git a/src/types.cpp b/src/types.cpp index 889269564..0ce2f127f 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3410,12 +3410,15 @@ gb_internal i64 type_size_of(Type *t) { if (t->kind == Type_Basic) { GB_ASSERT_MSG(is_type_typed(t), "%s", type_to_string(t)); switch (t->Basic.kind) { - case Basic_string: size = 2*build_context.word_size; break; + case Basic_string: size = 2*build_context.int_size; break; case Basic_cstring: size = build_context.word_size; break; case Basic_any: size = 2*build_context.word_size; break; case Basic_typeid: size = build_context.word_size; break; - case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: + case Basic_int: case Basic_uint: + size = build_context.int_size; + break; + case Basic_uintptr: case Basic_rawptr: size = build_context.word_size; break; default: @@ -3470,12 +3473,14 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { case Type_Basic: { GB_ASSERT(is_type_typed(t)); switch (t->Basic.kind) { - case Basic_string: return build_context.word_size; + case Basic_string: return build_context.int_size; case Basic_cstring: return build_context.word_size; case Basic_any: return build_context.word_size; case Basic_typeid: return build_context.word_size; - case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: + case Basic_int: case Basic_uint: + return build_context.int_size; + case Basic_uintptr: case Basic_rawptr: return build_context.word_size; case Basic_complex32: case Basic_complex64: case Basic_complex128: @@ -3509,10 +3514,10 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { case Type_DynamicArray: // data, count, capacity, allocator - return build_context.word_size; + return build_context.int_size; case Type_Slice: - return build_context.word_size; + return build_context.int_size; case Type_Tuple: { @@ -3607,7 +3612,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) { return type_align_of_internal(t->RelativeSlice.base_integer, path); case Type_SoaPointer: - return build_context.word_size; + return build_context.int_size; } // NOTE(bill): Things that are bigger than build_context.word_size, are actually comprised of smaller types @@ -3692,12 +3697,14 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { return size; } switch (kind) { - case Basic_string: return 2*build_context.word_size; + case Basic_string: return 2*build_context.int_size; case Basic_cstring: return build_context.word_size; case Basic_any: return 2*build_context.word_size; case Basic_typeid: return build_context.word_size; - case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr: + case Basic_int: case Basic_uint: + return build_context.int_size; + case Basic_uintptr: case Basic_rawptr: return build_context.word_size; } } break; @@ -3709,7 +3716,7 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { return build_context.word_size; case Type_SoaPointer: - return build_context.word_size*2; + return build_context.int_size*2; case Type_Array: { i64 count, align, size, alignment; @@ -3742,11 +3749,11 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) { } break; case Type_Slice: // ptr + len - return 2 * build_context.word_size; + return 2 * build_context.int_size; case Type_DynamicArray: // data + len + cap + allocator(procedure+data) - return (3 + 2)*build_context.word_size; + return 3*build_context.int_size + 2*build_context.word_size; case Type_Map: /* @@ -3902,8 +3909,8 @@ gb_internal i64 type_offset_of(Type *t, i32 index) { } else if (t->kind == Type_Basic) { if (t->Basic.kind == Basic_string) { switch (index) { - case 0: return 0; // data - case 1: return build_context.word_size; // len + case 0: return 0; // data + case 1: return build_context.int_size; // len } } else if (t->Basic.kind == Basic_any) { switch (index) { @@ -3913,16 +3920,16 @@ gb_internal i64 type_offset_of(Type *t, i32 index) { } } else if (t->kind == Type_Slice) { switch (index) { - case 0: return 0; // data - case 1: return 1*build_context.word_size; // len - case 2: return 2*build_context.word_size; // cap + case 0: return 0; // data + case 1: return 1*build_context.int_size; // len + case 2: return 2*build_context.int_size; // cap } } else if (t->kind == Type_DynamicArray) { switch (index) { - case 0: return 0; // data - case 1: return 1*build_context.word_size; // len - case 2: return 2*build_context.word_size; // cap - case 3: return 3*build_context.word_size; // allocator + case 0: return 0; // data + case 1: return 1*build_context.int_size; // len + case 2: return 2*build_context.int_size; // cap + case 3: return 3*build_context.int_size; // allocator } } else if (t->kind == Type_Union) { /* i64 s = */ type_size_of(t); -- cgit v1.2.3