From 04807309b7c0f7cb6326d0be1458ebfba90c015d Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 11 Apr 2025 21:49:48 +0200 Subject: [PATCH 1/3] Allow intrinsics.type_elem_type(simd_vector) to return the element type. Make `type_elem_type(#simd[4]f32)` return `f32`, same as it would for `[4]f32`. --- src/check_builtin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index fa3218759..f66a8605c 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -5550,6 +5550,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As case Type_EnumeratedArray: operand->type = bt->EnumeratedArray.elem; break; case Type_Slice: operand->type = bt->Slice.elem; break; case Type_DynamicArray: operand->type = bt->DynamicArray.elem; break; + case Type_SimdVector: operand->type = bt->SimdVector.elem; break; } } operand->mode = Addressing_Type; From f4ce84dfb41a5a38f7ac263cc9dbd40e84f2250c Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 11 Apr 2025 22:24:19 +0200 Subject: [PATCH 2/3] Add fix to `reflect.typeid_elem` --- core/reflect/reflect.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/reflect/reflect.odin b/core/reflect/reflect.odin index 7f79acb77..269e29c07 100644 --- a/core/reflect/reflect.odin +++ b/core/reflect/reflect.odin @@ -176,6 +176,7 @@ typeid_elem :: proc(id: typeid) -> typeid { case Type_Info_Enumerated_Array: return v.elem.id case Type_Info_Slice: return v.elem.id case Type_Info_Dynamic_Array: return v.elem.id + case Type_Info_Simd_Vector: return v.elem.id } return id } From 41d4ddbc5e8f57b8b901ce09fc5eab627ba440c2 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Fri, 11 Apr 2025 22:44:02 +0200 Subject: [PATCH 3/3] Add `reflect.length` + `reflect.capacity` support for `#simd[N]T` --- core/reflect/reflect.odin | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/reflect/reflect.odin b/core/reflect/reflect.odin index 269e29c07..401c664b8 100644 --- a/core/reflect/reflect.odin +++ b/core/reflect/reflect.odin @@ -261,7 +261,11 @@ length :: proc(val: any) -> int { } else { return (^runtime.Raw_String)(val.data).len } + + case Type_Info_Simd_Vector: + return a.count } + return 0 } @@ -287,7 +291,11 @@ capacity :: proc(val: any) -> int { case Type_Info_Map: return runtime.map_cap((^runtime.Raw_Map)(val.data)^) + + case Type_Info_Simd_Vector: + return a.count } + return 0 }