aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-08-05 13:06:55 +0100
committergingerBill <bill@gingerbill.org>2024-08-05 13:06:55 +0100
commiteeb92e2644a8241b6dc6950f6a2712d5164ea4e3 (patch)
tree354b573f6034da1615dd4418e552f9f963139f2b /src
parentfd06be2243db3fa193702f881947eaa5f2ebf24b (diff)
Allow cast between `#simd[N]rawptr` <-> `#simd[N]uintptr`
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend_expr.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp
index 59d5cce23..f843dfa92 100644
--- a/src/llvm_backend_expr.cpp
+++ b/src/llvm_backend_expr.cpp
@@ -2028,7 +2028,11 @@ gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
} else if (is_type_integer(src_elem) && is_type_boolean(dst_elem)) {
LLVMValueRef i1vector = LLVMBuildICmp(p->builder, LLVMIntNE, value.value, LLVMConstNull(LLVMTypeOf(value.value)), "");
res.value = LLVMBuildIntCast2(p->builder, i1vector, lb_type(m, t), !is_type_unsigned(src_elem), "");
- } else {
+ } else if (is_type_pointer(src_elem) && is_type_integer(dst_elem)) {
+ res.value = LLVMBuildPtrToInt(p->builder, value.value, lb_type(m, t), "");
+ } else if (is_type_integer(src_elem) && is_type_pointer(dst_elem)) {
+ res.value = LLVMBuildIntToPtr(p->builder, value.value, lb_type(m, t), "");
+ }else {
GB_PANIC("Unhandled simd vector conversion: %s -> %s", type_to_string(src), type_to_string(dst));
}
return res;