Commit graph

10 commits

Author SHA1 Message Date
Bill Currie
95a50fefa2 [qfcc] Aggressively cancel terms
While it currently doesn't have any effect on generated code, it proved
to be necessary when experimenting with optimizing the operand of extend
expressions (which proved to produce worse code).

Along with some 0 -> nullptr changes.
2024-04-18 22:46:13 +09:00
Bill Currie
5191fc26a3 [qfcc] Unify much of the qc and glsl parser interface
This gets the types such that either there is only one definition, or C
sees the same name for what is essentially the same type despite there
being multiple local definitions.
2024-04-18 12:41:24 +09:00
Bill Currie
dd17e45052 [qfcc] Use a prefix for qc tokens
I had wanted to do this earlier but shied away from the large edit. Now
it became more necessary (and will become even more necessary when I get
to the glsl front-end).
2023-10-24 19:50:31 +09:00
Bill Currie
76c92fada0 [qfcc] Clean up implicit int exprs
Hides the const-cast away where the expression is created. Just cleaner
in general.
2023-10-19 22:52:17 +09:00
Bill Currie
360dfc0038 [qfcc] Respect commutativity when optimizing adds
This fixes the really odd bug of certain string values getting swapped
in vkgen when DEBUG_QF_MEMORY was defined in expr.c. It will also
prevent a lot of fun with floats in the future, I imagine.
2023-10-02 22:33:29 +09:00
Bill Currie
2134c85a47 [qfcc] Collect common multiplication terms
This gets my `m * p * ~m` code as optimal as possible if my counting is
correct (this does not include the extra extends and add needed to merge
the values). Also, there might be a possibility of recombining some ops
into a vector op, but I'm happy with this.
2023-10-01 23:17:51 +09:00
Bill Currie
f3edc06c45 [qfcc] Prefer constant scalar mults for collecting
This makes it more likely for a squared scale multiplier remaining
intact, resulting in slightly better code.
2023-10-01 22:31:35 +09:00
Bill Currie
04f49d1ca4 [qfcc] Commit common scale terms
While it works, and does improve the code slightly, it could do better
by favoring constants over variables for the common factor.
2023-10-01 21:53:50 +09:00
Bill Currie
e8521eb4cd [qfcc] Collect like terms into products
That is, `x+x -> 2*x` (and similar for higher counts). Doesn't make much
difference for just 2, but it will make collecting scales easier and I
remember some testing showing that `2*x` is faster than `x+x` for
floating point.

Of course, motor-point keeps bouncing around numerically :/
2023-10-01 19:01:36 +09:00
Bill Currie
ca1b455aa0 [qfcc] Collect common cross product terms
This reduces the number of cross products in `m * p * ~m` from 4 or 5 (4
after the old CSE went through the code) to 2 even before CSE.
2023-10-01 17:32:10 +09:00