- $$MASK_TO_INT and $$INT_TO_MASK to create bool masks from integers and back.

- Fix bug when creating bool vectors in certain cases.
This commit is contained in:
Christoffer Lerno
2025-12-25 20:55:11 +01:00
parent 18b246c577
commit f3b71ed7eb
13 changed files with 193 additions and 30 deletions

View File

@@ -6357,8 +6357,7 @@ static inline void llvm_emit_vector_initializer_list(GenContext *c, BEValue *val
FOREACH_IDX(i, Expr *, element, elements)
{
llvm_emit_expr(c, &val, element);
llvm_value_rvalue(c, &val);
vec_value = llvm_update_vector(c, vec_value, val.value, (ArrayIndex)i);
vec_value = llvm_update_vector(c, vec_value, llvm_load_value_store(c, &val), (ArrayIndex)i);
}
}
else
@@ -6382,18 +6381,18 @@ static inline void llvm_emit_vector_initializer_list(GenContext *c, BEValue *val
ASSERT(vec_size(designator->designator_expr.path) == 1);
DesignatorElement *element = designator->designator_expr.path[0];
llvm_emit_expr(c, &val, designator->designator_expr.value);
llvm_value_rvalue(c, &val);
LLVMValueRef value = llvm_load_value_store(c, &val);
switch (element->kind)
{
case DESIGNATOR_ARRAY:
{
vec_value = llvm_update_vector(c, vec_value, val.value, element->index);
vec_value = llvm_update_vector(c, vec_value, value, element->index);
break;
}
case DESIGNATOR_RANGE:
for (ArrayIndex idx = element->index; idx <= element->index_end; idx++)
{
vec_value = llvm_update_vector(c, vec_value, val.value, idx);
vec_value = llvm_update_vector(c, vec_value, value, idx);
}
break;
case DESIGNATOR_FIELD: