Begin work on separating int and word sizes (i.e. size_of(int) might not equal size_of(uintptr))

This commit is contained in:
gingerBill
2023-04-20 11:46:23 +01:00
parent b2b88f1d99
commit 84f966cb8f
5 changed files with 81 additions and 61 deletions

View File

@@ -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);