From 4e48ba21c1a0ee97492708120cc2e824764dbc94 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Fri, 30 Sep 2022 23:26:52 +0100 Subject: [PATCH] [decompiler] make `(not (logtest?` work (#1934) --- decompiler/IR2/FormExpressionAnalysis.cpp | 124 +++++++++--------- .../jak1/engine/ambient/ambient_REF.gc | 2 +- .../reference/jak1/engine/anim/aligner_REF.gc | 4 +- .../reference/jak1/engine/anim/joint_REF.gc | 4 +- .../jak1/engine/camera/cam-combiner_REF.gc | 2 +- .../jak1/engine/camera/cam-layout_REF.gc | 8 +- .../jak1/engine/camera/cam-master_REF.gc | 6 +- .../jak1/engine/camera/cam-states-dbg_REF.gc | 4 +- .../jak1/engine/camera/cam-states_REF.gc | 26 ++-- .../jak1/engine/camera/camera_REF.gc | 2 +- .../collide/collide-reaction-target_REF.gc | 6 +- .../jak1/engine/debug/anim-tester_REF.gc | 22 ++-- .../reference/jak1/engine/debug/menu_REF.gc | 2 +- .../jak1/engine/draw/drawable-tree_REF.gc | 2 +- .../jak1/engine/draw/drawable_REF.gc | 10 +- .../jak1/engine/draw/process-drawable_REF.gc | 6 +- .../jak1/engine/entity/entity_REF.gc | 8 +- .../jak1/engine/game/collectables-part_REF.gc | 6 +- .../jak1/engine/game/collectables_REF.gc | 8 +- .../jak1/engine/game/game-info_REF.gc | 2 +- .../jak1/engine/game/generic-obs_REF.gc | 8 +- .../jak1/engine/game/powerups_REF.gc | 4 +- .../jak1/engine/game/projectiles_REF.gc | 6 +- .../jak1/engine/game/settings_REF.gc | 2 +- .../engine/game/task/process-taskable_REF.gc | 2 +- .../jak1/engine/game/voicebox_REF.gc | 2 +- .../engine/gfx/generic/generic-merc_REF.gc | 2 +- .../jak1/engine/gfx/hw/display_REF.gc | 2 +- .../jak1/engine/gfx/merc/merc_REF.gc | 2 +- .../reference/jak1/engine/gfx/ripple_REF.gc | 2 +- .../jak1/engine/gfx/water/water_REF.gc | 24 ++-- .../jak1/engine/level/load-boundary_REF.gc | 4 +- .../reference/jak1/engine/load/decomp_REF.gc | 2 +- .../reference/jak1/engine/load/loader_REF.gc | 2 +- .../reference/jak1/engine/nav/navigate_REF.gc | 14 +- .../reference/jak1/engine/nav/path_REF.gc | 4 +- .../reference/jak1/engine/ps2/pad_REF.gc | 2 +- .../sparticle/sparticle-launcher_REF.gc | 10 +- .../jak1/engine/target/logic-target_REF.gc | 32 ++--- .../jak1/engine/target/target-death_REF.gc | 16 +-- .../jak1/engine/target/target-handler_REF.gc | 14 +- .../jak1/engine/target/target-util_REF.gc | 37 +++--- .../jak1/engine/target/target2_REF.gc | 43 +++--- .../jak1/engine/target/target_REF.gc | 35 +++-- .../jak1/engine/ui/hud-classes_REF.gc | 2 +- .../reference/jak1/kernel/gcommon_REF.gc | 4 +- .../reference/jak1/kernel/gkernel_REF.gc | 4 +- .../jak1/levels/beach/beach-obs_REF.gc | 12 +- .../jak1/levels/beach/lurkercrab_REF.gc | 2 +- .../jak1/levels/beach/seagull_REF.gc | 8 +- .../levels/common/battlecontroller_REF.gc | 2 +- .../jak1/levels/common/nav-enemy_REF.gc | 14 +- .../jak1/levels/common/ropebridge_REF.gc | 2 +- .../jak1/levels/common/sharkey_REF.gc | 4 +- .../jak1/levels/finalboss/final-door_REF.gc | 2 +- .../jak1/levels/finalboss/light-eco_REF.gc | 2 +- .../levels/finalboss/robotboss-misc_REF.gc | 2 +- .../jak1/levels/finalboss/robotboss_REF.gc | 4 +- .../levels/flut_common/target-flut_REF.gc | 30 ++--- .../jak1/levels/jungle/darkvine_REF.gc | 2 +- .../jak1/levels/jungle/hopper_REF.gc | 4 +- .../jak1/levels/jungle/jungle-mirrors_REF.gc | 4 +- .../jak1/levels/lavatube/lavatube-obs_REF.gc | 4 +- .../levels/maincave/driller-lurker_REF.gc | 4 +- .../jak1/levels/maincave/gnawer_REF.gc | 2 +- .../jak1/levels/maincave/mother-spider_REF.gc | 6 +- .../jak1/levels/misty/bonelurker_REF.gc | 2 +- .../jak1/levels/misty/mistycannon_REF.gc | 10 +- .../collide-reaction-racer_REF.gc | 4 +- .../levels/racer_common/racer-part_REF.gc | 2 +- .../levels/racer_common/racer-states_REF.gc | 5 +- .../levels/racer_common/target-racer_REF.gc | 9 +- .../rolling/rolling-lightning-mole_REF.gc | 2 +- .../jak1/levels/snow/snow-bunny_REF.gc | 2 +- .../jak1/levels/snow/snow-flutflut-obs_REF.gc | 2 +- .../jak1/levels/snow/snow-ram-boss_REF.gc | 8 +- .../reference/jak1/levels/sunken/bully_REF.gc | 4 +- .../jak1/levels/sunken/helix-water_REF.gc | 2 +- .../jak1/levels/sunken/orbit-plat_REF.gc | 2 +- .../jak1/levels/sunken/puffer_REF.gc | 8 +- .../jak1/levels/sunken/qbert-plat_REF.gc | 2 +- .../jak1/levels/sunken/sunken-pipegame_REF.gc | 2 +- .../jak1/levels/sunken/target-tube_REF.gc | 4 +- .../jak1/levels/village1/village-obs_REF.gc | 2 +- .../levels/village_common/villagep-obs_REF.gc | 4 +- .../reference/jak2/engine/anim/aligner_REF.gc | 8 +- .../jak2/engine/anim/joint-mod_REF.gc | 18 +-- .../reference/jak2/engine/anim/joint_REF.gc | 4 +- .../jak2/engine/camera/cam-combiner_REF.gc | 2 +- .../jak2/engine/camera/cam-layout_REF.gc | 8 +- .../jak2/engine/camera/cam-states-dbg_REF.gc | 4 +- .../jak2/engine/camera/cam-states_REF.gc | 30 ++--- .../jak2/engine/camera/camera_REF.gc | 2 +- .../jak2/engine/debug/editable-player_REF.gc | 2 +- .../jak2/engine/debug/editable_REF.gc | 4 +- .../reference/jak2/engine/debug/menu_REF.gc | 2 +- .../engine/debug/nav/mysql-nav-graph_REF.gc | 8 +- .../jak2/engine/draw/drawable-tree_REF.gc | 2 +- .../jak2/engine/entity/entity_REF.gc | 26 ++-- .../jak2/engine/game/game-info_REF.gc | 2 +- .../jak2/engine/game/settings_REF.gc | 4 +- .../jak2/engine/game/task/task-control_REF.gc | 24 ++-- .../jak2/engine/geometry/path_REF.gc | 6 +- .../particles/sparticle-launcher_REF.gc | 6 +- .../gfx/sprite/particles/sparticle_REF.gc | 2 +- .../reference/jak2/engine/load/loader_REF.gc | 2 +- .../reference/jak2/engine/math/math_REF.gc | 2 +- .../reference/jak2/engine/ps2/pad_REF.gc | 2 +- .../reference/jak2/engine/ps2/timer_REF.gc | 2 +- .../jak2/engine/target/board/board-h_REF.gc | 10 +- .../engine/target/board/board-states_REF.gc | 22 ++-- .../engine/target/board/board-util_REF.gc | 8 +- .../engine/target/board/target-board_REF.gc | 17 +-- .../jak2/engine/target/gun/gun-h_REF.gc | 12 +- .../jak2/engine/target/logic-target_REF.gc | 26 ++-- .../jak2/engine/target/target_REF.gc | 49 ++++--- .../reference/jak2/kernel/gcommon_REF.gc | 6 +- .../reference/jak2/kernel/gkernel_REF.gc | 4 +- test/decompiler/test_FormExpressionBuild.cpp | 2 +- .../test_FormExpressionBuildLong.cpp | 2 +- 120 files changed, 510 insertions(+), 541 deletions(-) diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index f437ca6240..d57b651fb9 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -4431,66 +4431,6 @@ FormElement* try_make_nonzero_logtest(Form* in, FormPool& pool) { } return nullptr; } -} // namespace - -FormElement* ConditionElement::make_zero_check_generic(const Env& env, - FormPool& pool, - const std::vector