mirror of
https://github.com/open-goal/jak-project
synced 2026-08-16 05:09:45 -04:00
decomp: ocean-transition (#616)
* some work on `ocean-transition` * decomp: finished non-blocked `ocean-transition` functions * decompiler: Support <0 unsigned comparison * decompiler/goalc: Support half-word and byte parallel extend ops * attempt to add support for byte stack spills, assertion errors `Assertion failed: idx < n_src, file ..\..\..\decompiler\Disasm\Instruction.cpp, line 353` * decomp: fix byte stack spills, only 1 issue remains in `draw-ocean-transition` * almost there... * closer, but unknowns about `dma-buffer` blocking * dealing with dma-buffer issues * some more fixes, only an obscure xmm issue remains * add two problematic functions to blacklists, avoid goal_src additions for now * fix building/compilation but TypeConsistency hits an assertion error the `ocean-mid-masks`'s `data` field is none of the types * decomp: finalize `ocean-transition` * address feedback - 1 issue remains * decomp: finalize `ocean-transition`
This commit is contained in:
@@ -3636,15 +3636,6 @@ FormElement* ConditionElement::make_generic(const Env& env,
|
||||
return make_less_than_zero_signed_check_generic(env, pool, source_forms, types);
|
||||
}
|
||||
|
||||
case IR2_Condition::Kind::LEQ_ZERO_SIGNED: {
|
||||
auto casted = make_casts_if_needed(source_forms, types, TypeSpec("int"), pool, env);
|
||||
auto zero = pool.alloc_single_element_form<SimpleAtomElement>(
|
||||
nullptr, SimpleAtom::make_int_constant(0));
|
||||
casted.push_back(zero);
|
||||
return pool.alloc_element<GenericElement>(GenericOperator::make_fixed(FixedOperatorKind::LEQ),
|
||||
casted);
|
||||
}
|
||||
|
||||
case IR2_Condition::Kind::LESS_THAN_ZERO_UNSIGNED: {
|
||||
auto casted = make_casts_if_needed(source_forms, types, TypeSpec("uint"), pool, env);
|
||||
auto zero = pool.alloc_single_element_form<SimpleAtomElement>(
|
||||
@@ -3654,6 +3645,15 @@ FormElement* ConditionElement::make_generic(const Env& env,
|
||||
casted);
|
||||
}
|
||||
|
||||
case IR2_Condition::Kind::LEQ_ZERO_SIGNED: {
|
||||
auto casted = make_casts_if_needed(source_forms, types, TypeSpec("int"), pool, env);
|
||||
auto zero = pool.alloc_single_element_form<SimpleAtomElement>(
|
||||
nullptr, SimpleAtom::make_int_constant(0));
|
||||
casted.push_back(zero);
|
||||
return pool.alloc_element<GenericElement>(GenericOperator::make_fixed(FixedOperatorKind::LEQ),
|
||||
casted);
|
||||
}
|
||||
|
||||
case IR2_Condition::Kind::GEQ_ZERO_SIGNED: {
|
||||
return make_geq_zero_signed_check_generic(env, pool, source_forms, types);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user