mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-31 18:32:12 +00:00
Add Odin types for System V ABI
This commit is contained in:
@@ -1848,6 +1848,50 @@ Array<Type *> systemv_distribute_struct_fields(Type *t, i32 level=0) {
|
||||
Entity *f = ts->fields[field_index];
|
||||
Type *bt = core_type(f->type);
|
||||
switch (bt->kind) {
|
||||
case Type_Basic:
|
||||
switch (bt->Basic.kind){
|
||||
case Basic_complex64:
|
||||
array_add(&distributed, t_f32);
|
||||
array_add(&distributed, t_f32);
|
||||
break;
|
||||
case Basic_complex128:
|
||||
array_add(&distributed, t_f64);
|
||||
array_add(&distributed, t_f64);
|
||||
break;
|
||||
case Basic_quaternion128:
|
||||
array_add(&distributed, t_f32);
|
||||
array_add(&distributed, t_f32);
|
||||
array_add(&distributed, t_f32);
|
||||
array_add(&distributed, t_f32);
|
||||
break;
|
||||
case Basic_quaternion256:
|
||||
array_add(&distributed, t_f64);
|
||||
array_add(&distributed, t_f64);
|
||||
array_add(&distributed, t_f64);
|
||||
array_add(&distributed, t_f64);
|
||||
break;
|
||||
case Basic_string:
|
||||
array_add(&distributed, t_u8_ptr);
|
||||
array_add(&distributed, t_int);
|
||||
break;
|
||||
case Basic_any:
|
||||
GB_ASSERT(type_size_of(t_uintptr) == type_size_of(t_typeid));
|
||||
array_add(&distributed, t_rawptr);
|
||||
array_add(&distributed, t_uintptr);
|
||||
break;
|
||||
|
||||
case Basic_u128:
|
||||
case Basic_i128:
|
||||
if (build_context.ODIN_OS == "windows") {
|
||||
array_add(&distributed, alloc_type_simd_vector(2, t_u64));
|
||||
} else {
|
||||
array_add(&distributed, bt);
|
||||
}
|
||||
default:
|
||||
goto DEFAULT;
|
||||
}
|
||||
break;
|
||||
|
||||
case Type_Struct:
|
||||
if (bt->Struct.is_raw_union) {
|
||||
goto DEFAULT;
|
||||
@@ -1877,6 +1921,10 @@ Array<Type *> systemv_distribute_struct_fields(Type *t, i32 level=0) {
|
||||
break;
|
||||
|
||||
case Type_Slice:
|
||||
array_add(&distributed, t_rawptr);
|
||||
array_add(&distributed, t_int);
|
||||
break;
|
||||
|
||||
case Type_DynamicArray:
|
||||
case Type_Map:
|
||||
case Type_Union:
|
||||
|
||||
Reference in New Issue
Block a user