mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-04-07 18:01:30 +00:00
[qfcc] Support expanding constant expressions
This makes a slight improvement to the commutator product in that it removes the expand statement, but there's still the problem of (a+a)/2. However, at least now the product is correct and slightly less abysmal.
This commit is contained in:
parent
aa9be53b6e
commit
8994042a47
3 changed files with 7 additions and 3 deletions
|
@ -542,7 +542,7 @@ expr_t *new_horizontal_expr (int op, const expr_t *vec, type_t *type);
|
|||
|
||||
const expr_t *new_swizzle_expr (const expr_t *src, const char *swizzle);
|
||||
|
||||
expr_t *new_extend_expr (const expr_t *src, type_t *type, int ext, bool rev);
|
||||
const expr_t *new_extend_expr (const expr_t *src, type_t *type, int ext, bool rev);
|
||||
|
||||
/** Create a new def reference (non-temporary variable) expression node.
|
||||
|
||||
|
|
|
@ -240,6 +240,10 @@ evaluate_constexpr (const expr_t *e)
|
|||
if (!is_constant (e->alias.expr)) {
|
||||
return e;
|
||||
}
|
||||
} else if (e->type == ex_extend) {
|
||||
if (!is_constant (e->extend.src)) {
|
||||
return e;
|
||||
}
|
||||
} else {
|
||||
return e;
|
||||
}
|
||||
|
|
|
@ -660,7 +660,7 @@ new_swizzle_expr (const expr_t *src, const char *swizzle)
|
|||
return expr;
|
||||
}
|
||||
|
||||
expr_t *
|
||||
const expr_t *
|
||||
new_extend_expr (const expr_t *src, type_t *type, int ext, bool rev)
|
||||
{
|
||||
expr_t *expr = new_expr ();
|
||||
|
@ -669,7 +669,7 @@ new_extend_expr (const expr_t *src, type_t *type, int ext, bool rev)
|
|||
expr->extend.extend = ext;
|
||||
expr->extend.reverse = rev;
|
||||
expr->extend.type = type;
|
||||
return expr;
|
||||
return evaluate_constexpr (expr);
|
||||
}
|
||||
|
||||
expr_t *
|
||||
|
|
Loading…
Reference in a new issue