- Add float[<3>] x = { .xy = 1.2, .z = 3.3 } swizzle initialization for vectors. #2599

This commit is contained in:
Christoffer Lerno
2025-11-26 11:31:08 +01:00
parent ab1efdda73
commit 8ec3a52ef7
9 changed files with 116 additions and 35 deletions

View File

@@ -4497,7 +4497,7 @@ static void llvm_emit_vector_assign_expr(GenContext *c, BEValue *be_value, Expr
LLVMValueRef result = be_value->value;
for (unsigned i = 0; i < vec_len; i++)
{
int index = (swizzle[(int)sw_ptr[i]] - 1) & 0xF;
int index = SWIZZLE_INDEX(sw_ptr[i]);
LLVMValueRef val = llvm_emit_extract_value(c, result, i);
vector_value = llvm_emit_insert_value(c, vector_value, val, index);
}
@@ -6860,7 +6860,7 @@ static void llvm_emit_swizzle_from_value(GenContext *c, LLVMValueRef vector_valu
const char *sw_ptr = expr->swizzle_expr.swizzle;
for (unsigned i = 0; i < vec_len; i++)
{
int index = (swizzle[(int)sw_ptr[i]] - 1) & 0xF;
int index = SWIZZLE_INDEX(sw_ptr[i]);
mask_val[i] = llvm_const_int(c, type_uint, index);
}
LLVMValueRef res = LLVMBuildShuffleVector(c->builder, vector_value, LLVMGetUndef(LLVMTypeOf(vector_value)), LLVMConstVector(mask_val, vec_len), sw_ptr);