mirror of
https://github.com/open-goal/jak-project
synced 2026-07-29 15:44:03 -04:00
[decompiler] Detect vector*! (#3846)
Detect use of `vector*!`, which is inlined in jak 2 and jak 3. --------- Co-authored-by: water111 <awaterford1111445@gmail.com>
This commit is contained in:
@@ -353,6 +353,8 @@ std::string get_simple_expression_op_name(SimpleExpression::Kind kind) {
|
||||
return "pcypld";
|
||||
case SimpleExpression::Kind::VECTOR_PLUS:
|
||||
return "vector+!2";
|
||||
case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT:
|
||||
return "vector-xyz-product!";
|
||||
case SimpleExpression::Kind::VECTOR_MINUS:
|
||||
return "vector-!2";
|
||||
case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT:
|
||||
@@ -427,6 +429,7 @@ int get_simple_expression_arg_count(SimpleExpression::Kind kind) {
|
||||
case SimpleExpression::Kind::VECTOR_MINUS:
|
||||
case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT:
|
||||
case SimpleExpression::Kind::VECTOR_CROSS:
|
||||
case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT:
|
||||
return 3;
|
||||
case SimpleExpression::Kind::SUBU_L32_S7:
|
||||
return 1;
|
||||
|
||||
@@ -256,6 +256,7 @@ class SimpleExpression {
|
||||
VECTOR_PLUS,
|
||||
VECTOR_MINUS,
|
||||
VECTOR_FLOAT_PRODUCT,
|
||||
VECTOR_XYZ_PRODUCT, // vector*!, elementwise xyz, jak3 only
|
||||
VECTOR_CROSS,
|
||||
SUBU_L32_S7, // use SUBU X, src0, s7 to check if lower 32-bits are s7.
|
||||
VECTOR_3_DOT,
|
||||
|
||||
@@ -238,6 +238,7 @@ TP_Type SimpleExpression::get_type(const TypeState& input,
|
||||
case Kind::VECTOR_PLUS:
|
||||
case Kind::VECTOR_MINUS:
|
||||
case Kind::VECTOR_CROSS:
|
||||
case Kind::VECTOR_XYZ_PRODUCT:
|
||||
return TP_Type::make_from_ts("vector");
|
||||
case Kind::VECTOR_FLOAT_PRODUCT:
|
||||
return TP_Type::make_from_ts("vector");
|
||||
|
||||
@@ -1858,6 +1858,8 @@ std::string fixed_operator_to_string(FixedOperatorKind kind) {
|
||||
return "vector-!";
|
||||
case FixedOperatorKind::VECTOR_PLUS:
|
||||
return "vector+!";
|
||||
case FixedOperatorKind::VECTOR_XYZ_PRODUCT:
|
||||
return "vector*!";
|
||||
case FixedOperatorKind::VECTOR_CROSS:
|
||||
return "vector-cross!";
|
||||
case FixedOperatorKind::VECTOR_FLOAT_PRODUCT:
|
||||
|
||||
@@ -2527,6 +2527,10 @@ void SimpleExpressionElement::update_from_stack(const Env& env,
|
||||
update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_CROSS, env, pool, stack,
|
||||
result, allow_side_effects);
|
||||
break;
|
||||
case SimpleExpression::Kind::VECTOR_XYZ_PRODUCT:
|
||||
update_from_stack_vector_plus_minus_cross(FixedOperatorKind::VECTOR_XYZ_PRODUCT, env, pool,
|
||||
stack, result, allow_side_effects);
|
||||
break;
|
||||
case SimpleExpression::Kind::VECTOR_FLOAT_PRODUCT:
|
||||
update_from_stack_vector_float_product(env, pool, stack, result, allow_side_effects);
|
||||
break;
|
||||
|
||||
@@ -162,6 +162,7 @@ enum class FixedOperatorKind {
|
||||
VECTOR_MINUS,
|
||||
VECTOR_CROSS,
|
||||
VECTOR_FLOAT_PRODUCT,
|
||||
VECTOR_XYZ_PRODUCT,
|
||||
L32_NOT_FALSE_CBOOL,
|
||||
VECTOR_3_DOT,
|
||||
PROCESS_TO_PPOINTER,
|
||||
|
||||
Reference in New Issue
Block a user